How can i know what TextView was clickbale? - android

i have one doubt. I have an iteration of TextViews, and what i want is when i click in one TextView , i want stop the iteration and open a web, who can i know what TextView as been click on? i have this code:
Iterator<TextView> it = text.iterator();
while(it.hasNext()){
test = it.next();
test.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
}
});
// condition to stop the iteration when i click on TextView
}
And what i want is the condition to stop the iteration when i click on the TextView that i want see, i try using some methods that are in the TextView and don't work. Anyone can help me? I have the iteration of TextViews because i want to do this dynamic, and i don't know the TextView who as click, and i want to know what TextView was click to stop the iteration, because if i don't stop this, for example if i have 3 TextView they will open the same web.
Thanks and forgive my English

I'm not sure I understand you entirely but from what I understand you want to stop the Iteration when you click on a TextView.
So one way you can do it is. Declare a boolean property for this class to use to control the loop, in this case I called it isStop and initial value with false.
while(it.hasNext() && !isStop){
...
}
then
public void onClick(View v) {
isStop = true;
//mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
So when you click on a TextView the flag will turn off the loop.

The solution to what i wanted:
On the Activity i create this.
OnClickListener s = new OnClickListener()
{
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
text = (TextView) findViewById(v.getId());
mWebView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
}
};
Iterator<TextView> it = text.iterator();
while(it.hasNext())
{
text = it.next();
text.setOnClickListener(s);
}

Related

How to disable Copy but enable Paste in a WebView?

I am using a WebView to show my website on my mobile Android app. I have disabled text selection in the WebView as I want to disable Copy.
I actually wish to allow the user to Paste a text but not Copy.
How can I do that please ?
public class MainActivity extends AppCompatActivity {
WebView webview;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
webview = findViewById(R.id.webView);
webview.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String host = Uri.parse(url).getHost();
String domain = "www.google.fr";
if (host.equals(domain)) {
// This is my website, so do not override; let my WebView load the page
return false;
} else {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
}
});
webview.setOnLongClickListener(new View.OnLongClickListener() {
#Override
public boolean onLongClick(View v) {
return true;
}
});
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webview.loadUrl("https://www.google.fr");
}
#Override
public void onBackPressed() {
if (webview.canGoBack()) {
webview.goBack();
}
}
}
As you know to copy a text you need to long press it to select.
So please add a longClickListener to the webview which will show anything else on long click instead of copying the text.
mWebView.setOnLongClickListener(new OnLongClickListener() {
#Override
public boolean onLongClick(View v) {
return true;
}
});
mWebView.setLongClickable(false);
But this will also disable using PASTE so to paste content from clipboard. I will suggest add a small button beside it and add an onClickListener to it which will paste the copied content to wherever you want.
ClipboardManager mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
String pasteData = "";
if (!(mClipboard.hasPrimaryClip())) {
} else if (!(mClipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))) {
} else {
ClipData.Item item = mClipboard.getPrimaryClip().getItemAt(0);
copiedText = item.getText().toString();
}

How to add new view

I've created Normal Activity layout with original relative layout.My xml Button redirect to a webpage. And I want to make full screen of webview when tap, so I set setContentView(mWebView); (which is dynamically called) ...
My problem is - to appear banner image (which is originally created with xml -) upon mWebView!
My code is -
(imgbanner is above this code and findviewbyid)
btnlogin.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
mWebView.loadUrl("http://www.facebook.com");
mWebView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
setContentView(mWebView);
}
});

Android WebView error for high density screens

I have an Android application which uses a WebView to render web page. In css I have set to show everything twice as big for high density screens (like Nexus 7 2013). If I open the web page from the browser, Everything shows as it should. But when I run the app, everything is very small.
Is there any way to determine why the application WebView shows content for lower density screens but browser (Chrome) shows as it should!
Device: Nexus 7 2013
// I used this class and my code is working fime at my side please try this may be it will help you
public class WebViewActivity extends Activity {
private WebView webview;
private static final String TAG = "Main";
private ProgressDialog progressBar;
private TextView header_maintext;
private TextView headeroptiontext;
private RelativeLayout back;
private String url_string="http://www.google.com";
private String header_maintext_string="Your text";
/** Called when the activity is first created. */
#SuppressLint("SetJavaScriptEnabled") #Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.webview_layout);
webview = (WebView)findViewById(R.id.webview01);
header_maintext= (TextView)findViewById(R.id.header_maintext);
header_maintext.setText(header_maintext_string);
headeroptiontext = (TextView)findViewById(R.id.headeroptiontext);
headeroptiontext.setVisibility(View.GONE);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
back = (RelativeLayout) findViewById(R.id.back_layout);
back.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
if(webview.canGoBack() == true)
{
webview.goBack();
}
else
{
finish();
}
}
});
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
progressBar = ProgressDialog.show(WebViewActivity.this, "My application", "Loading...");
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
Log.i(TAG, "Finished loading URL: " +url);
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(WebViewActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
alertDialog.setTitle("Error");
alertDialog.setMessage(description);
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alertDialog.show();
}
});
webview.loadUrl(url_string);
}
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webview.canGoBack() == true){
webview.goBack();
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
}
I think this article should help explain what you need to do: https://developers.google.com/chrome/mobile/docs/webview/pixelperfect
I suspect that the difference between Chrome and WebView boils down to the WebSettings that are being applied to the WebView.

How i can call webview form the other screen

i have 3 diferents screens: main(contains one image), dialog(contains another image) and browser(contains a webView) and one activity source, ok, in the activity source I call the dialog on click image in main layout, then the dialog shows another image and I want when click in the dialog image, the app change main layout for browser layout and then the browser load an specific URI and then close the dialog.
My code dont work becouse i dont know how i need use the webView in separate layout, for example, to call in dialog i need use dialog.findViewById(R.id.webView1) or in main only findViewById(R.id.webView1), but this not work now and the app crash...
My code:
ImageView imgMain = (ImageView)findViewById(R.id.imgMain1);
imgMain.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
final Dialog dialog = new Dialog(mainActivity.this);
dialog.setContentView(R.layout.dialog);
dialog.setTitle("Android");
dialog.setCancelable(true);
dialog.show();
//Boton de cerrar del dialog Android
Button closeDialog = (Button)dialog.findViewById(R.id.closeDialogBT);
closeDialog.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
dialog.cancel();
}
});
//click en imagen juegos del dialog android
ImageView imgDialog = (ImageView)dialog.findViewById(R.id.imgDialog1);
imgDialog.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
final WebView mWebView = (WebView)findViewById(R.id.webView1);
mWebView.loadUrl("http://www.example.com");
mWebView.setWebViewClient(new WebViewClient());
setContentView(R.layout.browser);
dialog.cancel();
}
});
}
});
Thank You!!!!
Why do you want to start WebView of one Activity from other activity.
It will be better to start activity containing WebView from your "imgDialog" with the intent.
and send URL string in that intent's extras.
in next step load webview with the URL string fetched from intent.
Try this. Hope this will help you
public class Example extends Activity {
private WebView mWebView;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.translate);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("http://www.example.com");
mWebView.setWebViewClient(new HelloWebViewClient());
}
private class HelloWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView webview, String url)
{
webview.loadUrl(url);
return true;
}
}
#Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
{
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}

How I get URL from webview on click

How can I get "clicked URL" from webview on its click event??
#Override
public void onClick(View v) {
if( v.getId() == R.id.webview) {
//Here i want to get clicked url
}
}
Thanks in advance.
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url){
webView.loadUrl(url);
// Here the String url hold 'Clicked URL'
return false;
}
});

Categories

Resources