I'm trying to add dynamically cardviews into horizontal scroll view so that I have as many cardviews as I have rows in the database. I have defined cardview in a separated XML file.
But I can't add the cardview into the layout in my main activity as the cardview is null. Is the problem in adding an element from a different file? Should I rather define the cardview in code? Or should I use RecyclerView instead?
I searched a lot but nothing helped yet.
Here is my main activity.
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout scroll = findViewById(R.id.layout_horizontal_theme);
CardView cardView = findViewById(R.id.theme_cardview);
scroll.addView(cardView);
}
XML file for card view
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:layout_marginBottom="20dp"
android:contentDescription="#string/card"
android:minHeight="150dp"
app:cardBackgroundColor="#FF402D"
app:cardCornerRadius="16dp"
android:id="#+id/theme_cardview">
<!-- app:cardElevation="10dp"-->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:id="#+id/layout_theme_card">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:contentDescription="#string/card_image"
android:cropToPadding="true"
android:maxWidth="100dp"
android:src="#drawable/android_developer" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:contentDescription="#string/card_theme"
android:text="#string/card_theme"
android:textColor="#color/Not_so_white_white"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>
And XML for main activity
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity"
tools:layout_gravity="center">
<RelativeLayout
android:id="#+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:layout_constraintBottom_toTopOf="#+id/horizontalScrollView"
app:layout_constraintEnd_toEndOf="#id/guideline2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="#id/guideline"
app:layout_constraintTop_toTopOf="parent">
<include layout="#layout/progress_bar" />
</RelativeLayout>
<HorizontalScrollView
android:id="#+id/horizontalScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="#string/list_scroll"
android:fillViewport="true"
app:layout_constraintBottom_toTopOf="#+id/horizontalScrollView2"
app:layout_constraintEnd_toEndOf="#id/guideline2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="#id/guideline"
app:layout_constraintTop_toBottomOf="#+id/relativeLayout">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="#+id/layout_horizontal_diff">
<include layout="#layout/difficulty_card" />
<include layout="#layout/difficulty_card" />
<include layout="#layout/difficulty_card" />
<include layout="#layout/difficulty_card" />
</LinearLayout>
</HorizontalScrollView>
<HorizontalScrollView
android:id="#+id/horizontalScrollView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="#string/list_scroll_2"
android:fillViewport="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="#+id/horizontalScrollView"
app:layout_constraintVertical_bias="0.503">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="#+id/layout_horizontal_theme">
<!-- <include layout="#layout/theme_card" />
<include layout="#layout/theme_card" />
<include layout="#layout/theme_card" />
<include layout="#layout/theme_card" />-->
</LinearLayout>
</HorizontalScrollView>
<androidx.constraintlayout.widget.Guideline
android:id="#+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.10" />
<androidx.constraintlayout.widget.Guideline
android:id="#+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.90" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="#+id/navDrawer"
android:layout_height="match_parent"
android:layout_width="wrap_content"
app:headerLayout="#layout/navigation_drawer"
app:menu="#menu/nav_drawer_menu"
android:layout_gravity="start"
android:fitsSystemWindows="true"/>
</androidx.drawerlayout.widget.DrawerLayout>
Thank you all for your help:)
You need to inflate your card view and then you can use it for any purpose:
View view = View.inflate(this, R.layout.cardview_layout, null);
You can then cast it to CardView
CardView cardView = (CardView) View.inflate(this, R.layout.cardview_layout, null);
Your code will look like this:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout scroll = findViewById(R.id.layout_horizontal_theme);
CardView cardView = (CardView) View.inflate(this, R.layout.cardview_layout, null);
scroll.addView(cardView);
}
follow the example to create custom view. After that, create
your custom view and put them to horizontal view.
CardView cardView = findViewById(R.id.theme_cardview); alway return null.
Related
I have a textview which text must be selectable textView.setTextIsSelectable(true) and scrollable to bottom by default textView.setMovementMethod(ScrollingMovementMethod.getInstance()).
<?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="match_parent"
android:layout_height="match_parent"
android:background="#color/colorScreenBackground"
app:layout_behavior="#string/appbar_scrolling_view_behavior"
tools:context="com.xxxx.xxxx.MainActivity"
tools:showIn="#layout/activity_main"
android:orientation="vertical"
android:weightSum="100">
<TextView
android:id="#+id/result"
android:scrollbars = "vertical"
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40"
android:elevation="8dp"
android:textIsSelectable="true"
android:gravity="bottom"
android:background="#color/white"
android:padding="5dp"
android:focusable="true"
android:fastScrollEnabled="true"
android:fastScrollAlwaysVisible="true"
android:scrollbarSize="7dip"
android:textAppearance="#style/Base.TextAppearance.AppCompat.Medium" />
<androidx.core.widget.NestedScrollView
android:id="#+id/nested_scroll"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="60"
android:background="#color/gray_background"
app:layout_behavior="#string/appbar_scrolling_view_behavior">
<androidx.recyclerview.widget.RecyclerView
android:id="#+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
tools:listitem="#layout/recyclerview_item"
android:background="#color/gray_background"
/>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
The problem is that the setMovementMethod disable the textview selectability.
How to solve this?
NB: The principal feature required here is that not only the textview must be scrollable, but it must also appeared initially scrolled to bottom by default, and this is provided by the setMovementMethod(ScrollingMovementMethod.getInstance()), according to How to get the Android TextView to scroll down to the end automatically.
Put your text view inside an scroll view in your xml
<ScrollView
android:id="#+id/scrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40">
<TextView
android:id="#+id/textView"
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="8dp"
android:textIsSelectable="true"
android:gravity="bottom"
android:background="#color/white"
android:padding="5dp"
android:text="#string/dummy"
android:focusable="true"
android:textAppearance="#style/Base.TextAppearance.AppCompat.Medium" />
</ScrollView>
Then do this in your class
//This will scroll to bottom
ScrollView scrollView=findViewById(R.id.scrollView);
scrollView.post(new Runnable() {
#Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
I am trying to build my first Amazon Fire TV app using Android Lean back library. I want to customise the BrowseFragment to look like the image shown below.
I tried setting a custom layout as below.
#Override public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
View title = inflater.inflate(R.layout.custom_title_view, parent, false);
titleImageView = (AppCompatImageView) title.findViewById(R.id.title_content_thumbnail);
return title;
}
but the resulting layout is showing as shown below, with a transparent TitleView and the list rows are showing below that. Please suggest a better approach to make the UI looks similar to the first image. Couldn't find anything that could implement this.
So, I have solved this somehow. My activity_main.xml looks like this.
<?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:background="#color/default_background"
android:orientation="vertical"
>
<fragment
android:id="#+id/title_layout"
android:name="com.kalpnik.vrdevotee.fragment.MainTitleFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_alignParentTop="true"
android:layout_weight="1"
/>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/main_fragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_below="#+id/title_layout"
android:layout_weight="1"
tools:deviceIds="tv"
/>
</LinearLayout>
In the FrameLayout I will load a fragment which extended from BrowseFragment, so this gives me the necessary rows.
And at the top, I am loading MainTitleFragment which is extended from Fragment and the layout looks like below.
fragment_main_title.xml
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:background="#000000"
android:orientation="horizontal"
>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#color/icon_background"
android:orientation="vertical"
android:paddingTop="16dp"
>
<TextView
android:id="#+id/title_content_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
tools:text=""
android:textColor="#color/colorPrimaryDark"
android:textSize="28sp"
android:textStyle="bold"
/>
<TextView
android:id="#+id/title_content_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
android:ellipsize="end"
android:text=""
android:textSize="15sp"
/>
</LinearLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
>
<android.support.v7.widget.AppCompatImageView
android:id="#+id/title_content_thumbnail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
/>
<View
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_gravity="left|start"
android:background="#drawable/transparent_bg"
/>
<View
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_gravity="bottom"
android:background="#drawable/transparent_bg_bottom"
/>
</FrameLayout>
</LinearLayout>
And this worked for me. Hope this helps.
I have a LinearLayout which I'm trying to make VISIBLE, then GONE, then VISIBLE again. However after making it GONE, it doesn't become visible again. As a note, it works fine if I make it INVISIBLE: it appears and disappears with no problem.
These are my files:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="#+id/noconnectionll"
android:visibility="gone"
android:padding="#dimen/node_default_spacing"
android:background="#color/category_no_internet"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="#string/no_internet_short"
android:textColor="#fff"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:id="#+id/no_connection_retry"
android:text="#string/try_again"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<ListView
android:dividerHeight="0dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:id="#+id/spinner_wrapper"
tools:visibility="visible"
android:visibility="invisible"
android:background="#a0ffffff"
android:gravity="center_horizontal|center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="#+id/spinner"
android:src="#drawable/ic_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="#+id/category_loading"
android:text="#string/loading"
android:textColor="#000"
android:padding="#dimen/activity_padding"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
This is the method I'm using to show/hide:
private void hideOrShowLoading(final boolean show) {
final ViewGroup spinnerWrapper = (ViewGroup)ll.findViewById(R.id.spinner_wrapper);
final View spinner = ll.findViewById(R.id.spinner);
if (show) {
spinnerWrapper.setVisibility(View.VISIBLE); // Not working after being set to GONE previously
final Animation rotation = AnimationUtils.loadAnimation(getContext(), R.anim.rotate);
rotation.setFillAfter(true);
spinner.startAnimation(rotation);
} else {
spinnerWrapper.setVisibility(View.GONE);
spinner.clearAnimation();
}
}
Any tips? Could it have something to do with the ListView above it having a height of 0 and a weight of 1?
Thanks
Update
I also tried the following after the if (show) block, with no luck:
listview.invalidate();
spinnerWrapper.invalidate();
ll.invalidate();
ll.requestLayout();
ll is the LinearLayout that contains both.
While I believe this is caused by the layout_weight=1 property, I wasn't able to properly fix this.
The following hack did work. Basically, I'm surrounding the spinnerWrapper in another linear layout which is always visible.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="#+id/noconnectionll"
tools:visibility="visible"
android:visibility="gone"
android:padding="#dimen/node_default_spacing"
android:background="#color/category_no_internet"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="#string/no_internet_short"
android:textColor="#fff"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:id="#+id/no_connection_retry"
android:text="#string/try_again"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<ListView
tools:background="#d496d4"
android:dividerHeight="0dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<!-- Weird bug with layout_weight=1 on the listview above means we need this linearlayout -->
<LinearLayout
android:background="#0ca917"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="#+id/spinner_wrapper"
android:background="#a0ffffff"
android:gravity="center_horizontal|center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="#+id/spinner"
android:src="#drawable/ic_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="#+id/category_loading"
android:text="#string/loading"
android:textColor="#000"
android:padding="#dimen/activity_padding"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
I have LinearLayout inside of DrawerLayout which renders drawer item and views according to layout_weight. I am trying to hide that view programmatically by setting its height to 0 or with View.Visibility - GONE property.
Tried
By setting its Visibilty as GONE it acts as INVISIBLE
By getting its LayoutParams and setting its height to 0. Though it acts as INVISIBLE
ParentLayout : mother.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
android:id="#+id/activityMotherDrawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<include layout="#layout/activity_mother" />
<include layout="#layout/motherdrawer" />
</android.support.v4.widget.DrawerLayout>
Layout : motherdrawer.xml
<?xml version="1.0" encoding="utf-8"?>
<com.app.ui.view.ScrimInsetsFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/drawerRootLayout"
android:layout_width="#dimen/activity_mother_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#color/background_application"
android:fitsSystemWindows="false"
android:orientation="vertical">
<RelativeLayout
android:id="#+id/activityMotherDrawerInnerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="#dimen/activity_mother_drawer_layout_padding">
<LinearLayout
android:id="#+id/activityMotherDrawerInnerInnerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="#+id/activityMotherDrawerMyAttendanceLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical">
<ImageView
android:id="#+id/activityMotherDrawerMyAttendanceIv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_centerInParent="true"
android:layout_weight="1.5"
android:padding="#dimen/activity_mother_drawer_image_padding"
android:scaleType="centerInside"
android:src="#drawable/ic_drawer_attendance" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_below="#id/activityMotherDrawerMyAttendanceIv"
android:layout_centerHorizontal="true"
android:layout_weight="1"
android:gravity="top|center"
android:text="#string/activity_mother_drawer_attendance"
android:textColor="#color/colorGray"
android:textSize="#dimen/activity_mother_drawer_text_size" />
</LinearLayout>
<LinearLayout
android:id="#+id/activityMotherDrawerDashboardLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical">
<ImageView
android:id="#+id/activityMotherDrawerDashboardIv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_centerInParent="true"
android:layout_weight="1.5"
android:padding="#dimen/activity_mother_drawer_image_padding"
android:scaleType="centerInside"
android:src="#drawable/ic_drawer_dashboard" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_below="#id/activityMotherDrawerDashboardIv"
android:layout_centerHorizontal="true"
android:layout_weight="1"
android:gravity="top|center"
android:text="#string/activity_mother_drawer_dashboard"
android:textColor="#color/colorGray"
android:textSize="#dimen/activity_mother_drawer_text_size" />
</LinearLayout>
<LinearLayout
android:id="#+id/activityMotherDrawerSettingsLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1"
android:clickable="true"
android:orientation="vertical">
<ImageView
android:id="#+id/activityMotherDrawerSettingsIv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_centerInParent="true"
android:layout_weight="1.5"
android:padding="#dimen/activity_mother_drawer_image_padding"
android:scaleType="centerInside"
android:src="#drawable/ic_drawer_settings" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_below="#id/activityMotherDrawerSettingsIv"
android:layout_centerHorizontal="true"
android:layout_weight="1"
android:gravity="top|center"
android:text="#string/activity_mother_drawer_setting"
android:textColor="#color/colorGray"
android:textSize="#dimen/activity_mother_drawer_text_size" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</com.app.ui.view.ScrimInsetsFrameLayout>`
Whenever I tried to fetch the layoutParam using getLayoutParams it returns FrameLayout where its ParentView is LinearLayout.
Using Java :
mDashboardLayout = (LinearLayout)mDrawerInnerRootLayout.findViewById(R.id.activityMotherDrawerDashboardLayout);
LinearLayout.LayoutParams mParams = (LinearLayout.LayoutParams) mDashboardLayout.getLayoutParams();//returns FrameLayout instead where it should return LinearLayout
mDashboardLayout.setVisibility(View.GONE); //it acts as INVISIBILITY
Can anyone enlighten me why it returns FrameLayout instead of
LinearLayout Or Why its Visibility changes to INVISIBLE instead of GONE?
Though changing View - Visibility to either GONE or INVISIBLE still View is always INVISIBLE. It does accept onClick event. As per SO, I want to completely remove that view. I am able to achieve it using following method.
I am adding View to ParentView hierarchy accordingly programmatically and refreshing the whole layout.
View inflatedDashboardView;
inflatedDashboardView = mInflater.inflate(R.layout.layout_drawer_dashboard, mDrawerInnerRootLayout, false);
mDashboardLayout = (LinearLayout) inflatedDashboardView.findViewById(R.id.activityMotherDrawerDashboardLayout);
mDrawerInnerRootLayout.addView(inflatedDashboardView);
mDrawerInnerRootLayout.forceLayout();
Still I'm not able to understand why InnerView Layout inside of DrawerLayout always return FrameLayout.
I am using CollapsingBarLayout with viewpager and the fragments of viewpager are having listview, gridview.
Here is my code:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:id="#+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bigsteptech.seandroidnativeapp.classes.modules.common.ViewGroupEvent">
<android.support.design.widget.AppBarLayout
android:id="#+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="#style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="#+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:expandedTitleTextAppearance="#style/TransparentText">
<FrameLayout
android:id="#+id/carouselLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_collapseMode="parallax">
<ImageView
android:id="#+id/coverImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"/>
<LinearLayout
android:layout_width="match_parent"
android:gravity="bottom"
android:orientation="vertical"
android:layout_gravity="bottom"
android:padding="#dimen/profile_image_margin"
android:background="#drawable/gradient_bg"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="#dimen/profile_image_margin"
android:textSize="#dimen/text_size_xlarge"
android:textStyle="bold"
android:textColor="#color/white"
android:id="#+id/content_title"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_marginLeft="#dimen/profile_image_margin"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#color/white"
android:textSize="#dimen/text_size_medium"
android:id="#+id/category_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_toRightOf="#+id/category_title"
android:layout_marginLeft="#dimen/profile_image_margin"
android:textColor="#color/white"
android:textSize="#dimen/text_size_medium"
android:id="#+id/memberCount"/>
</RelativeLayout>
</LinearLayout>
</FrameLayout>
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:theme="#style/ActionBarThemeOverlay"
app:popupTheme="#style/ActionBarPopupThemeOverlay"
android:background="#drawable/gradient_bg"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:isScrollContainer="true"
app:layout_behavior="#string/appbar_scrolling_view_behavior">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/contentInfo"
android:paddingBottom="48sp"
android:clipToPadding="false"
android:orientation="vertical">
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="#dimen/profile_page_left_right_margin"
android:layout_gravity="center"
android:id="#+id/progressBar"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#color/grey_light">
<TextView android:id="#+id/ownerTitle"
android:clickable="true"
android:focusable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="#dimen/keyline_1"
android:layout_gravity="center_vertical"
android:textAppearance="#style/TextAppearance.AppCompat.Body1"
android:textColor="#color/body_text_1" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="#dimen/profile_image_margin"
android:padding="10dp">
<com.bigsteptech.seandroidnativeapp.Classes.Modules.Common.ViewRelated.ExpandableTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="#dimen/keyline_1"
style="#style/TextBody"
android:layout_gravity="center_vertical"
android:id="#+id/view_description" />
</LinearLayout>
<android.support.design.widget.TabLayout
android:id="#+id/slidingTabs"
android:layout_width="match_parent"
app:tabIndicatorHeight="3dp"
app:tabMode="scrollable"
android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager
android:id="#+id/pager"
android:layout_width="match_parent"
android:layout_height="300dp">
</android.support.v4.view.ViewPager>
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:layout_anchor="#id/appbar"
android:id="#+id/joinGroupButton"
app:layout_anchorGravity="bottom|right|end"
android:src="#drawable/ic_action_new"
android:layout_margin="#dimen/fab_margin"
android:clickable="true"/>
</android.support.design.widget.CoordinatorLayout>
The fragments which are having listview, gridview do not scroll to up in collapsing toolBar, how can I achieve this working..
Please help me, thank you so much in advanced...
You need put your ViewPager inside AppBar section and setup layout_behavior :
<android.support.design.widget.AppBarLayout>>
<android.support.design.widget.CollapsingToolbarLayout>
// THIS VIEWS WILL BE COLLAPSED
</android.support.design.widget.CollapsingToolbarLayout>
// THIS VIEWS WILL BE PINNED
<android.support.v4.view.ViewPager
android:id="#+id/pager"
android:layout_width="match_parent"
android:layout_height="300dp"
app:layout_behavior="#string/appbar_scrolling_view_behavior">
</android.support.v4.view.ViewPager>
</android.support.design.widget.AppBarLayout>
If you using Fragments as children of ViewPager you need setup layout_behavior to each fragment inside ViewPager too.
app:layout_behavior="#string/appbar_scrolling_view_behavior"
collapsing toolbar with tabs using new material design support library
I used official collapsing toolbar feature of new material design support library.
here collapsed view height is 256dp and tabs height is 56dp
i made following path
i cut image into two parts one for collapsed view and one for tabs.
i cutted images according to dp to pixel sizes with high resolution drawable xxxhdpi and put into drawable folder so it will adjustable to all screen sizes
i have 2000x1246 image
top image 256dp= 2000x1024 pixel
bottom tab image 56dp= 2000x224 pixel
Here is the complete example with source code
ListView and GridView are not equipped with NestedScrolling functions. And thats needed to work with the CollapsingToolbarLayout.
The easiest way to make it work, would be to change your ListView and GridView to RecyclerViews (RecyclerView implements NestedScrollingChild).
i have achieved this i will put my code with the library used
firstly this is the layout file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/attraction_lay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f5f6f5">
<RelativeLayout
android:id="#+id/bar"
android:layout_width="match_parent"
android:layout_height="47dp">
<TextView
android:id="#+id/exp_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="16dp"
android:text="See & do"
android:textColor="#1b7bba"
android:textSize="17sp" />
<RelativeLayout
android:id="#+id/relmenu"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true">
<ImageView
android:layout_width="17dp"
android:layout_height="14dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="17dp"
android:layout_marginLeft="8dp"
android:src="#drawable/menu_icon_blue" />
</RelativeLayout>
<RelativeLayout
android:id="#+id/relsearch"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">
<ImageView
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="17dp"
android:layout_marginRight="8dp"
android:src="#drawable/search_icon_blue" />
</RelativeLayout>
</RelativeLayout>
<View
android:id="#+id/div"
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_below="#+id/bar"
android:background="#1b7bba" />
<FrameLayout
android:id="#+id/layout_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="#+id/div">
<ListView
android:id="#+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:divider="#null"
android:focusable="false"
android:focusableInTouchMode="false"
android:listSelector="#android:color/transparent"
android:scrollbars="none" />
<FrameLayout
android:id="#+id/header"
android:layout_width="match_parent"
android:layout_height="290dp"
android:layout_marginTop="0dp"
android:orientation="vertical">
<FrameLayout
android:id="#+id/images_header"
android:layout_width="fill_parent"
android:layout_height="250dp"
android:layout_marginBottom="40dp">
<android.support.v4.view.ViewPager
android:id="#+id/gallery"
android:layout_width="fill_parent"
android:layout_height="250dp"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:overScrollMode="never" />
<RelativeLayout
android:id="#+id/gallery_back"
android:layout_width="40dp"
android:layout_height="60dp"
android:layout_gravity="left|center_vertical">
<ImageView
android:layout_width="20dp"
android:layout_height="52dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="#drawable/arrow_back" />
</RelativeLayout>
<RelativeLayout
android:id="#+id/gallery_next"
android:layout_width="40dp"
android:layout_height="60dp"
android:layout_gravity="right|center_vertical">
<ImageView
android:layout_width="20dp"
android:layout_height="52dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="#drawable/arrow_next" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="-150dp"
android:layout_marginTop="170dp"
android:background="#drawable/horizontal_gradient" />
<TextView
android:id="#+id/pagenum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|bottom"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:text="3/15"
android:textColor="#FFF"
android:textSize="14sp" />
</FrameLayout>
<FrameLayout
android:id="#+id/header_text_layout"
android:layout_width="match_parent"
android:layout_height="#dimen/min_height_textheader_materiallike"
android:layout_gravity="bottom"
android:background="#FFF">
<!--<TextView-->
<!--android:id="#+id/text_header"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="center_vertical"-->
<!--android:layout_marginLeft="70dp"-->
<!--android:text="ttttt"-->
<!--android:textColor="#android:color/white"-->
<!--android:textSize="18sp"-->
<!--android:textStyle="bold" />-->
<RelativeLayout
android:id="#+id/button_header"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginLeft="83dp"
android:layout_marginRight="83dp">
<RelativeLayout
android:id="#+id/photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="2.5">
<ImageView
android:layout_width="17dp"
android:layout_height="14dp"
android:layout_centerInParent="true"
android:background="#drawable/photo_blue_icon"
/>
</RelativeLayout>
<RelativeLayout
android:id="#+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2.5">
<ImageView
android:layout_width="14dp"
android:layout_height="16dp"
android:layout_centerInParent="true"
android:background="#drawable/video_blue_icon" />
</RelativeLayout>
<RelativeLayout
android:id="#+id/share"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2.5">
<ImageView
android:layout_width="15dp"
android:layout_height="20dp"
android:layout_centerInParent="true"
android:background="#drawable/share_blue_icon" />
</RelativeLayout>
<RelativeLayout
android:id="#+id/fav"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2.5">
<ImageView
android:layout_width="20dp"
android:layout_height="19dp"
android:layout_centerInParent="true"
android:background="#drawable/fav_blue_icon" />
</RelativeLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_alignParentBottom="true"
android:background="#d7d7d7" />
</RelativeLayout>
</FrameLayout>
</FrameLayout>
</FrameLayout>
and in the java code you should add this
StikkyHeaderBuilder.ListViewBuilder.stickTo(mListView)
.setHeader(R.id.header, (ViewGroup) contentView)
.minHeightHeaderDim(R.dimen.min_height_textheader_materiallike)
.animator(new ParallaxStikkyAnimator())
.attatch_Acitivty(Attractions.this)
.castTo("Attractions")
.build();
and here is the library used
but i have modified this library to work as i want
the modification is add method in stcikylistview builder to know the activity used and pass a delegate for scrolling i used this because i added a blur for images in the viewpager
and her is my modification
i will upload the modified version of the library
here you are https://drive.google.com/file/d/0BxdN8PyW5nmHMmFFeFY2aW9zdlk/view?usp=sharing
I had this issue as well. You'll need to used RecyclerView. Now I understand you must use ListView and GridGiew, but you can use that within a RecyclerView.
For example, I'll show you how to implement a GridLayout within in a RecyclerView.
In your fragment layout (that you'd want to implement GridView in), add the following XML
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/recyclerviewGRID"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Then on your fragment java,
on your fragment onCreateView, define the RecyclerView,
RecyclerView rv = (RecyclerView) v.findViewById(R.id.recyclerviewGRID);
setupRecyclerView(rv);
Create the method setupRecyclerView,
private void setupRecyclerView(RecyclerView recyclerView) {
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(recyclerView.getContext(), 2));
mAdapter = new AdapterGridView(getActivity().getApplicationContext(), mItems);
recyclerView.setAdapter(mAdapter);
}
You must define mAdapter as RecyclerView.Adapter first. Then create your the adapter for the RecyclerView. Note that, mItems is an ArrayList that will contain contents of your list.
AdapterGridView.java
public class AdapterGridView extends RecyclerView.Adapter<AdapterGridView.ViewHolder> {
ArrayList<AdItem> mItems;
Context context, contxt;
public AdapterGridView(Context context, ArrayList<AdItem> mItems) {
this.context = context;
this.mItems = mItems;
}
#Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
//attach your list item layout here, mine in this case is called list_item_grid_item
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.list_item_grid_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
#Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
AdItem singleItem = mItems.get(i);
//attach data to your layout as the following manner
viewHolder.tvspecies.setText(singleItem.getName());
}
#Override
public int getItemCount() {
//return the number of list items
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public ImageView imgThumbnail, avatar;
public TextView tvspecies, adIDLBL;
public ViewHolder(View itemView) {
super(itemView);
itemView.setClickable(true);
itemView.setOnClickListener(this);
//define your list item views, basically the stuff in list_item_grid_item
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvspecies = (TextView)itemView.findViewById(R.id.tv_species);
}
#Override
public void onClick(View v) {
//handle item click events
}
}
}