android lollipop: content above tabs: scrolling issue - android-tabs

I have an activity just like Google NewsStand where there is an image above tabs. When the user starts scrolling up, the image and tabs start scrolling up (as if the scrolling is disabled for the contents under the tabs) and the contents of the tab start scrolling once the image above the tabs goes past the screen. All this happens in one scroll motion. See Google NewsStand app for what I'm talking.how can this be achieved?
I'm using appcompat-21 and toolbar for the material look. Thanks a lot for answering this...
Below is the sample code (based on SlidingTabsBasic)
ACTIVITY_MAIN.XML
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/sample_main_layout">
<FrameLayout
android:id="#+id/sample_content_fragment"
android:layout_weight="2"
android:layout_width="match_parent"
android:layout_height="0px" />
FRAGMENT_SAMPLE.XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:layout_height="200dp" android:layout_width="wrap_content"
android:text="some random text"/>
<com.example.android.common.view.SlidingTabLayout
android:id="#+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="#+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="#android:color/white"/>
</LinearLayout>
PAGER_ITEM.XML
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:layout_width="wrap_content">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="#+id/item_subtitle"
android:layout_width="wrap_content"
android:layout_height="400dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Page:"/>
<TextView
android:id="#+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="80sp" />
</LinearLayout>
</ScrollView>
This code as is allows you to scroll contents vertically within the tabs. I also want to scroll the content of the entire screen first before scrolling the tabs, just like in the NewsStand app, all in one scroll motion. How do I achieve this?

Related

How do i make the buttons from the following code be all the same size and occupy the entire gridLayout?

I have this grid layout which is part of an another grid layout, and contains 6 buttons.
It is next to a relative grid layout, if that makes any difference, thats why its width and height are set at 0dp.
How do I make them all the same size and make them fill the grid without using fixed values?
<android.support.v7.widget.GridLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0.5"
app:layout_columnWeight="1"
app:layout_rowWeight="1"
app:columnCount="2"
app:rowCount="3"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="#string/pocetna_dugme_prijava_problema"
style="#style/StartMenuButton"
android:background="#drawable/rounded_corners_button_start_menu"
android:id="#+id/btnPrijavaProblemaLink"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/pocetna_dugme_prijava_ebill"
style="#style/StartMenuButton"
android:background="#drawable/rounded_corners_button_start_menu"
android:id="#+id/btnPrijavaEracunLink"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/pocetna_dugme_prijava_ukljucenje"
style="#style/StartMenuButton"
android:background="#drawable/rounded_corners_button_start_menu"
android:id="#+id/btnUkljucenjeLink"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/pocetna_dugme_prepaid_dopuna"
android:padding="0dp"
android:drawableBottom="#drawable/prepaid10"
style="#style/StartMenuButton"
android:background="#drawable/rounded_corners_button_start_menu"
android:id="#+id/btnPrepaidDopunaLink"/>
If you want the control to divide the screen space horizontally and vertically,you can use LinearLayout to achieve this, and set the android:layout_weight="1" property for the controls.
And to make the UI look better, you can also set android:layout_margin property.
You can refer to the following code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
>
<Button
android:layout_margin="5dp"
android:layout_weight="1"
android:text="button1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:layout_margin="5dp"
android:layout_weight="1"
android:text="button2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_margin="5dp"
android:layout_weight="1"
android:text="button3"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:layout_margin="5dp"
android:layout_weight="1"
android:text="button4"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</LinearLayout>
You should change all your nested LinearLayouts to use ConstraintLayouts. Nested LinearLayouts inflate slowly, which was why ConstraintLayouts were created to replace them about 4-5 years ago. Android.Support.V7.Widgets were also dropped in favour of AndroidX controls at about the same time.

How to add Scroll View to a Linear Layout which is having Linear layouts again inside it

I have a Linear layout and again inside the linear layout I have some list off apps which are designed using Linear layouts, Now I want to scroll this list of Linear layouts. Please help me how to achieve this.
If you want to add scroll view in LinearLayout, but there are many LinearLayouts in LinearLayout, scroll this list of layout, you can take a look:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="fill_parent"
android:layout_height="fill_parent">
<ScrollView android:id="#+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<!-- Content here -->
</LinearLayout>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<!-- Content here -->
</LinearLayout>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<!-- Content here -->
</LinearLayout>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<!-- Content here -->
</LinearLayout>
</LinearLayout>
</ScrollView>

Xamarin Tabhost - overlapped tab content

I created a tabbed application using TabHost widget, from Xamarin.
When I am changing the tabs, they are overlapping.
https://imgur.com/a/cfRWlsl
This is the layout for the main page.
I have the tabs at the buttom of the screen and the content of the tabs above.
The tabs are created dynamically.
<?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"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="#+id/actualtabcontent"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_above="#+id/tabContainer"/>
<LinearLayout android:id="#+id/tabContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<TabHost android:id="#android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#color/fullOpacityBlack">
<LinearLayout android:orientation="vertical"
android:layout_width="match_parent" android:layout_height="match_parent">
<TabWidget android:id="#android:id/tabs"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="90dp"
android:layout_weight="0"
android:layout_alignParentBottom="true"
android:background="#color/fullOpacityBlack" />
<FrameLayout android:id="#android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</TabHost>
</LinearLayout>
</RelativeLayout>

Change Background Color of MvxItemTemplate?

How does one change the Background Color of an MvxItemTemplate?
I can change the Background of the MvxListView, but that changes the background of all the elements.
Here's the relevant code:
<MvvmCross.Binding.Droid.Views.MvxListView
android:id="#+id/favoritesList"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxItemTemplate="#layout/template_screen"
local:MvxBind="ItemsSource FavoritesGroupedList; ItemClick ScreenSelectedCommand; ItemLongClick ShowUnFavoriteCommand" />
If I place BackgroundColor BlackOrBlueColor(IsUnFavorite) in the local:MvxBind for the ListView, it works. I tried to place the Binding in my template:
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="#+id/screenIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
local:MvxBind="BackgroundColor BlackOrBlueColor(IsUnFavorite)"/>
<TextView
android:id="#+id/screenText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp" />
</LinearLayout>
But it doesn't work.
You can't change the MvxItemTemplate background color, but you can change the background color of the root layout inside the item template:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="BackgroundColor BlackOrBlueColor(IsUnFavorite)">

How to Scroll two ListView as one?

I Have two listviews Side by side but I want to scroll both listviews as one how can i do that?
Tried using OnClickListener but it does not seem to work?
I think best approach is to put each list view inside a LinearLayout and specified width on it. This works to display list views side by side. Careful with listviews filling its parent, the layout don't display as you expect. ListView may bypass the width parameter of the parent.
After that you need to put these LinearLayouts on Scrollview and you need set fillViewport. You can reach detailed info about fillViewport from here
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="#+id/scrollView1"
android:background="#000000"
android:layout_width="match_parent"
android:fillViewport="true" <!-- here -->
android:layout_height="match_parent" >
<LinearLayout
android:id="#+id/linear1"
android:background="#FF0000"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:background="#00FF00"
android:id="#+id/linear2"
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="vertical" >
<ListView
android:id="#+id/ListView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#drawable/settingsMenuBorder"
android:scrollbars="none"
android:layout_marginTop="30dp"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:background="#0000FF"
android:id="#+id/linear3"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical" >
<ListView
android:id="#+id/ListView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#drawable/settingsMenuBorder"
android:scrollbars="none"
android:layout_marginTop="30dp"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>

Resources