Analogamente ad altri browser come Chrome e Firefox, ho bisogno che l'utente faccia un lungo clic su un collegamento quindi mostri un menu contestuale, ma se fanno un lungo clic su qualcosa e non è un collegamento, non fanno nulla.WebView Android, l'impostazione del clic lungo è abilitata sui collegamenti esclusivamente?
L'utilizzo di registerForContextMenu(myWebView);
consente di fare clic su qualsiasi oggetto che non desidero. Pertanto, penso che sia necessario filtrare gli oggetti da registerForContextMenu(myWebView);
o analizzare l'html per i collegamenti che sembra eccessivo. Ho anche provato l'override shouldOverrideUrlLoading
metodo:
private boolean isLongClicked = false;
this.webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(isLongCLicked){
//do something
}else
view.loadUrl(url);
return true;
}
});
webView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
isLongClicked = true;
forumView.performClick();
isLongCLicked = false;
return false;
}
});
Ho guardato questa discussione Enable longClick in WebView ma non mi ha aiutato. Ho provato a implementarlo ma ho una forza vicina.
import android.content.Context;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.webkit.WebView;
public class WebViewSub extends WebView {
public WebViewSub(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onCreateContextMenu(ContextMenu menu) {
super.onCreateContextMenu(menu);
HitTestResult result = getHitTestResult();
MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// do the menu action
return true;
}
};
if (result.getType() == HitTestResult.IMAGE_TYPE
|| result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
// Menu options for an image.
// set the header title to the image url
menu.setHeaderTitle(result.getExtra());
menu.add("save image")
.setOnMenuItemClickListener(handler);
menu.add("View Image")
.setOnMenuItemClickListener(handler);
} else if (result.getType() == HitTestResult.ANCHOR_TYPE
|| result.getType() == HitTestResult.SRC_ANCHOR_TYPE) {
// Menu options for a hyperlink.
// set the header title to the link url
menu.setHeaderTitle(result.getExtra());
menu.add("Save Link")
.setOnMenuItemClickListener(handler);
menu.add("Share Link")
.setOnMenuItemClickListener(handler);
}
}
}
Infine ho provato a HitTestResult, Questo è probabilmente il migliore che abbia avuto modo di risolvere il problema.
myWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
registerForContextMenu(myWebView);
WebView.HitTestResult result = forumView.getHitTestResult();
if(result.getType() == 7){
openContextMenu(myWebView);
}
unregisterForContextMenu(myWebView);
return false;
}
});
Questo funziona solo sui collegamenti, tuttavia il mio menu contestuale visualizzato come un rettangolo vuoto. Ho provato a utilizzare la vista OnLongClick effettiva, ma non sembra funzionare neanche. Non penso che il mio menu contestuale sia sbagliato; ha funzionato all'esterno di OnLongClick.
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.click, menu);
}
Come visualizzare correttamente il menu? Penso di essere sulla strada giusta usando HitTestResult onLongClick.
Edit (RISPOSTA):
myWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
unregisterForContextMenu(myWebView);
WebView.HitTestResult result = forumView.getHitTestResult();
if(result.getType() == 7){
registerForContextMenu(myWebView);
}
return false;
}
});
Ogni volta a Long Fare clic su questo annulla la registrazione del menu di scelta rapida, allora lo registra, spuntando il menu. Credo che funzioni perché non appena si fa clic su un collegamento, si annulla la registrazione del menu di scelta rapida registrato e quindi si decide se si tratta di un collegamento per visualizzare il menu di scelta rapida. In precedenza, non concedeva all'utente la possibilità di scegliere un'opzione e, subito dopo aver registrato il menu di scelta rapida, annullarne la registrazione.
Che cos'è forumview? – WideFide
forumview == webView :) –