Issue
How do I hide bottom navigation bar when type in keyboard in WebView in a one of the fragment?
This is my fragment:
public class chatFragment extends Fragment {
LinearLayout eLinearLayout_chat;
WebView webView_chat;
ProgressBar mProgressBar_chat;
BottomNavigationView nav;
//SwipeRefreshLayout swipeRefreshLayout_chat;
// Firebase instance variables
//private FirebaseAuth mFirebaseAuth;
//private FirebaseUser mFirebaseUser;
//private String mUsername;
//private String mPhotoUrl;
public chatFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_chat, container, false);
webView_chat = (WebView) v.findViewById(R.id.webview_chat);
eLinearLayout_chat = (LinearLayout) v.findViewById(R.id.LinearWebView_chat);
mProgressBar_chat = (ProgressBar) v.findViewById(R.id.progressBar_chat);
nav = (BottomNavigationView) v.getRootView().findViewById(R.id.bottom_navigation);
//swipeRefreshLayout_chat = (SwipeRefreshLayout) v.findViewById(R.id.swipeweb_chat);
webView_chat.loadUrl("https://drriyadh-lab.xyz/track/");
webView_chat.getSettings().setJavaScriptEnabled(true);
webView_chat.getSettings().setUseWideViewPort(true);
webView_chat.getSettings().setDomStorageEnabled(true);
webView_chat.getSettings().setSupportZoom(false);
webView_chat.getSettings().setAppCacheEnabled(true);
webView_chat.getSettings().setDatabaseEnabled(true);
webView_chat.getSettings().setAllowFileAccess(true);
webView_chat.getSettings().setAllowContentAccess(true);
webView_chat.getSettings().setSupportMultipleWindows(true);
webView_chat.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView_chat.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView_chat.getSettings().setLoadWithOverviewMode(true);
webView_chat.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//mProgressBar_chat.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mProgressBar_chat.setVisibility(View.GONE);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
eLinearLayout_chat.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("https://www.tidio.com/powered-by-tidio/live-chat/?platform=others&project=dc71bf5k0ncictpdhdyhujy2hzf9zn7x&device=mobile&utm_source=plugin_ref&utm_medium=widget_v4&utm_campaign=plugin_ref&utm_referrer=drriyadh-lab.xyz")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
if (url.startsWith("tel:") || url.startsWith("whatsapp:")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
// all the rest open in Webview // make it false to fisable button of powered by tidio (still but not work in webview) make it to false to make whatsapp link opened , make it true to disbale whatsapp link and enable powered by tidio link work but in external browser
return false;
}
});
return v;
}
}
I tried lots of ideas, but I didn't find any solutions to this, and the bottom navigation is in a MainActivity, and I have 3 fragments in the bottom navigation bar. One of the fragments is WebView (this is shown above). When I type in keyboard the bottom nav go up the keyboard. I want to hide it when I type in keyboard.
Solution
I have solved the problem
in the first make the View v = inflater.inflate(R.layout.fragment_track, container, false);
make it final
like this
final View v = inflater.inflate(R.layout.fragment_track, container, false);
(replace layout name with your layout name) after this add this
BottomNavigationView nav;
to your fragment class
after that add
nav = (BottomNavigationView) getActivity().findViewById(R.id.bottom_navigation);
to your `public class (fragment name) extends Fragment`
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
}
replace the id with your bottom navigation id in the activity_main
after all this add this
v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
v.getWindowVisibleDisplayFrame(r);
int orgnal = Resources.getSystem().getDisplayMetrics().heightPixels;
int heightDiff = orgnal - v.getHeight();
if (heightDiff > 500) { // if more than 100 pixels, its probably a keyboard...
nav.setVisibility(View.GONE);
} else {
nav.setVisibility(View.VISIBLE);
}
}
});
after
final View v = inflater.inflate(R.layout.your layout name, container, false);
and before return v;
it should work and thank you all guys
Answered By - bart mine
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.