Activity.setProgress(int progress) is deprecated - android-webview

I would like to show progress bar when android webview is loading and I used Activity.setProgess(int).
Android documentation says setProgress(int progress) was deprecated in API level 24. No longer supported starting in API 21.
So, what should I use instead to show progress when webview is loading?

Implement toolbar with progress bar or spinner.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar_actionbar"
style="#style/HeaderBar"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:visibility="visible"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="#style/ActionBarPopupThemeOverlay"
app:theme="#style/ActionBarThemeOverlay"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:gravity="right"
android:divider="?android:dividerVertical"
android:dividerPadding="8dp"
android:orientation="horizontal"
android:showDividers="beginning|middle">
<ProgressBar
style="#style/Widget.AppCompat.ProgressBar.Horizontal"
android:id="#+id/toolbarProgressBar"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</android.support.v7.widget.Toolbar>
Then find it in your view and update.
ProgressBar progressBar = (ProgressBar)findViewById(R.id.toolbarProgressBar);
progressBar.setIndeterminate(false);
progressBar.setProgress(x);

Related

How to Disable Swipe Refresh when Bootstrap Modal Appears in Android WebView?

I am building an Android WebView app and website which I load in WebView contain Bootstrap Modal ,it appears as Login/SignUp popup or Choose Image popup.
But problem is that when Modal appears Swipe refresh is working and i am not able to scroll up as swipe refresh automatically refresh the page, So i want to disable swipe refresh only when modal opens.
In Chrome App ,swipe refresh automatically disables when Modal opens or appears so i want setting just as chrome android app.
Thanks in Advance
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#color/black"
android:id="#+id/relative"
tools:context=".MainActivity">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/swipeRefreshLayout"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="WebViewLayout">
<ProgressBar
android:layout_width="match_parent"
android:layout_height="8dp"
android:id="#+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_marginTop="-2dp"
android:progress="20"
android:visibility="gone"
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="#color/white" />
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/myWebView"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:nestedScrollingEnabled="true"
android:isScrollContainer="true"
tools:ignore="ObsoleteLayoutParam,RtlHardcoded" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#color/black"
android:id="#+id/relativeLayout">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="No Internet Connetion, Please Connect To Internet And Try Again. "
android:textSize="30dp"
android:textColor="#color/white"
android:layout_centerHorizontal="true"
android:textAlignment="center"
android:layout_marginTop="40dp"
android:id="#+id/txtNoConeection"
android:layout_marginRight="23dp"
android:layout_marginLeft="25dp"
android:gravity="center_horizontal" />
<Button
android:layout_width="140dp"
android:layout_height="65dp"
android:text="Retry"
android:backgroundTint="#color/white"
android:textColor="#620839"
android:layout_below="#+id/txtNoConeection"
android:layout_centerHorizontal="true"
android:layout_marginTop="400dp"
android:textSize="20dp"
android:id="#+id/btnNoConnection"/>
</RelativeLayout>
</LinearLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>
In onCreate
swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setColorSchemeColors(Color.rgb(0,72,85), Color.rgb(255,216,96) , Color.rgb(93,7,53) );
swipeRefreshLayout.setOnRefreshListener(() -> {
webView.reload();
if (null != swipeRefreshLayout){
swipeRefreshLayout.setRefreshing(false);
}
});
//Solved WebView SwipeUp Problem
swipeRefreshLayout.getViewTreeObserver().addOnScrollChangedListener(() -> swipeRefreshLayout.setEnabled(webView.getScrollY() == 0));
It's pretty old but since it shows up on google searches, might help some people...
I solved it with a weird method. Just added some js to my website. not using bootstrap but is there any reason it wouldn't work?
when I'm opening the div:
document.body.style.overflowY = "hidden";
document.body.style.minHeight = "calc(100vh + 1px)";
window.scrollBy(0, 1);
and when I'm closing it:
document.body.style.overflowY = "scroll";
document.body.style.minHeight = "0px";
window.scrollBy(0, -1);
if you have found a better solution i would like to hear about it as well...
i really don't understand why it's not fixed yet. chrome handles it perfectly but webview is still like this...
first i tried using
document.body.style.overscrollBehavior = "none";
but it has no effect in webview...

ListView and WebView Scrolling

I am developing an app which have a webview component and a list view component. I have a transparent layout on my webview to capture all the user event. I execute a javascript scroll function on the webview whenever the user is trying to scroll. Every-time the function is called, webview get scrolled and it returns a value which is used to scroll my list view. To scroll my list view I am using myListView.setSelectionFromTop(pos, y). The problem here is if I disable scrolling for the listview, the webview scrolls smoothly. But if the listview is enable, the webview doesn't scroll smoothly. My ultimate aim is to scroll listview and webView simultaneously. But it seems while scrolling listview it blocks the UI thread and hence make the scrolling of the webview slow.
Can anyone suggest me how to get this to work?
#MysticMagic Here is my xml layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:widget="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<RelativeLayout
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_marginTop="26dp"
android:background="#FFFFFF"
android:gravity="center"
android:id="#+id/relLayout">
<ListView
android:id="#+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp"
android:divider="#D3D0D9"
android:layout_centerInParent="true"
android:background="#E2E2E2"
android:cacheColorHint="#android:color/transparent"
android:footerDividersEnabled="false"
android:gravity="center"
android:layout_gravity="center"
android:listSelector="#android:color/transparent"
android:visibility="visible"
android:fillViewport="true" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:id="#+id/webLayout"
android:background="#FFFFFF"
android:layout_height="fill_parent"
android:layout_toRightOf="#+id/relLayout">
<WebView
android:id="#+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none">
</WebView>
<com.example.view.CustomView
android:id="#+id/transparentView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"/>
</RelativeLayout>

TextView blocking ListView onItemClickListener

I have simple list view with list items defined by following layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#drawable/list_item_selector" >
<TextView
android:id="#+id/menuItemTextView"
android:clickable="false"
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="#00000000"
android:padding="20dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#color/blue"
android:textIsSelectable="true" />
<ImageView
android:id="#+id/arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:paddingRight="10dp"
android:src="#drawable/arrow" />
> </RelativeLayout>
When I click TextView the listView.onItemClickListener is not called. The problem occurs on Android 4. Android 2.x is OK. Is there any trick to pass an event from TextView to its ListView without defining onClickListner on the TextView?
In your main activity just make you listview as focusable true. This worked for me. If you are using a custom list view the focus is passed to its childs and not the list so to get the focus back to listview use
listView.focusable(true);
and the other things as textview just set their focus as false.
It was the android:textIsSelectable="true" attribute. Don't follow lint hints blindly.
android:inputType="textMultiLine" can also cause this problem. If you've included that attribute in your TextView xml, try removing it.

How to change TabWidget's background color from XML in Android

I have come across this problem. I have a tab widget on top of the view, with four tabs in it. I have been asked to change the background color of the whole tab view area. Not for any tab, but the whole area of that tab view.
I also been asked for not changing any source code for some branding reason. So I could only do it through xml file. I searched around but seems all solution is by using java code. So I wonder if there is a way that I could change the widget background color (just color, not images) by using only resources files?
Here is my layout file for the tab layout:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
>
<TabWidget
android:id="#android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#color/tabbackgroundcolor" />
<FrameLayout
android:layout_below="#android:id/tabs"
android:id="#android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
/>
</RelativeLayout>
</TabHost>
You could see that I added "android:background="#color/tabbackgroundcolor"" in the TabWidget part, however it not work..
Thank you!

Get view from Resource Layout in xamarin or monodroid

I try to get MapView from Resource Layout but it returns null:
var map_view = FindViewById<MapView>(Resource.Id.emap);
mylayout.xml like :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/etklmap"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="#+id/zoomOutButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Zoom Out" />
<com.google.android.maps.MapView
android:id="#+id/emap"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:apiKey="apikey" />
</LinearLayout>
So is there any way to get view without calling SetContentView(Resource.Layout.mylayout);
The resource file is just XML - it doesn't become a collection of viewgroups and widgets until it's "inflated"
One way to inflate XML is to use SetContentView.
Another way is to use the inflaterservice - see this monodroid question (and answers) for an example: Android: Getting the View added with LayoutInflator
Note that - under the covers - all setcontentview does is to inflate the XML using exactly the same inflaterservice, passing in the activity as the parent frame for the inflation.
The official android docs on this are http://developer.android.com/reference/android/view/LayoutInflater.html