安卓開發小總結

2-2.可折疊式標題欄圖片發自簡書App

這個效果很酷,但是用design控件做到起來很簡單。

<android.support.design.widget.CoordinatorLayoutxmlns: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="match_parent"android:fitsSystemWindows="true"><android.support.design.widget.AppBarLayoutandroid:id="@+id/detailsAppBar"android:layout_width="match_parent"android:layout_height="wrap_content"android:fitsSystemWindows="true"><android.support.design.widget.CollapsingToolbarLayoutandroid:id="@+id/detailsCollapsingToolbarLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"app:contentScrim="?android:attr/colorPrimary"app:layout_scrollFlags="scroll|exitUntilCollapsed"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><ImageViewandroid:id="@+id/cover"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFAEAEAE"android:fitsSystemWindows="true"app:layout_collapseMode="parallax"/></LinearLayout><android.support.v7.widget.Toolbarandroid:id="@+id/detailsToolbar"android:layout_width="match_parent"android:layout_height="?android:attr/actionBarSize"app:layout_collapseMode="pin"/></android.support.design.widget.CollapsingToolbarLayout></android.support.design.widget.AppBarLayout><android.support.v4.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:fillViewport="true"app:layout_behavior="@string/appbar_scrolling_view_behavior"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><android.support.v7.widget.CardViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="15dp"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:layout_marginTop="35dp"app:cardCornerRadius="4dp"><TextViewandroid:id="@+id/detailsTextView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="10sp"android:layout_margin="10dp"/></android.support.v7.widget.CardView></LinearLayout></android.support.v4.widget.NestedScrollView><android.support.design.widget.FloatingActionButtonandroid:id="@+id/detailsFloatingActionButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="20dp"android:src="@drawable/ic_launcher"app:layout_anchor="@id/detailsAppBar"app:layout_anchorGravity="bottom|end"/></android.support.design.widget.CoordinatorLayout>

依舊是CoordinatorLayout作為根布局,相比3-1的布局,appBarLayout內又包裹了一層CollapsingToolbarLayout,CollapsingToolbarLayout又包裹了Toolbar和其他控件。

CollapsingToolbarLayout是一個增強型的FrameLayout,我們將其android:fitsSystemWindows設置為true,使其可以出現在狀態欄,但是必須將其所有的父布局都設置上並且將狀態欄設為透明才會生效。

為該Activity定義一個style 繼承自AppTheme 只是將狀態欄改成透明

<stylename="DetailsTheme"parent="AppTheme"><itemname="android:statusBarColor">@android:color/transparent</item></style>在AndroidManifest.xml中為該活動設置樣式android:theme="@style/DetailsTheme"

對於NestedScrollView,和3-1布局RecyclerView一樣,設置了

app:layout_behavior="@string/appbar_scrolling_view_behavior"

但是響應 NestedScrollView 的不再是 Toolbar,而是CollapsingToolbarLayout,app:layout_scrollFlags的值也變了。因為我們做到了不同的效果,滾動到最後只剩下toolbar,所以用exitUntilCollapsed,使CollapsingToolbarLayout滾動到最小高度。

至於CollapsingToolbarLayout內子控件的app:layout_collapseMode屬性,是指定子控件在隨父控件滾動折疊時的模式:「pin」:固定模式,在折疊的時候最後固定在頂端;「parallax」:視差模式,在折疊的時候會有個視差折疊的效果。

三.TabLayout+ViewPager+FragmentPagerAdapter

1.基本使用

這個選擇播放源和劇集的功能便是由TabLayout+ViewPager+FragmentPagerAdapter 做到,碎片的布局就是一個GridView。

當初學習使用這個組合的時候,一臉懵逼,這也不懂那也不會。後來用了幾次,就縷清楚了。

先在Activity的布局里添加TabLayout和ViewPager,然後新建一個碎片或幾個碎片,根據數據類型和功能為碎片寫上布局,最後自定義一個FragmentPagerAdapter將ViewPager和Fragment二者聯繫起來。

①添加控件

<android.support.design.widget.TabLayoutandroid:id="@+id/source_tabLayout"android:layout_width="match_parent"android:layout_height="wrap_content"app:tabSelectedTextColor="#ff7a61"app:tabIndicatorHeight="0dp"app:tabBackground="@color/tabBg"app:tabMode="fixed"/><android.support.v4.view.ViewPagerandroid:id="@+id/movie_href_list_viewPager"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"/>

②新建碎片及布局

publicclassDetailFragmentextendsFragment{List<Map<String,String>>movieHrefList;Viewview=null;Contextcontext;GridViewgridView;publicDetailFragment(List<Map<String,String>>movieHrefList){//把要給GridView填充的數據傳遞進來this.movieHrefList=movieHrefList;}@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//TODO:Implementthismethod//為碎片設置布局if(view==null)view=inflater.inflate(R.layout.detail_fragment,container,false);context=view.getContext();gridView=(GridView)view.findViewById(R.id.detail_fragment_gridView);//為GridView設置適配器:繪制布局、填充數據SimpleAdapteradapter=newSimpleAdapter(context,movieHrefList,R.layout.movie_href_item,newString[]{"title"},newint[]{R.id.movie_href_itemTextView});gridView.setAdapter(adapter);//返回碎片的布局returnview;}}

③自定義FragmentPagerAdapter將碎片添加到ViewPager中,並使TabLayout和ViewPager做到聯動

publicclassDetailFragmentPagerAdapterextendsFragmentPagerAdapter{//要添加的碎片List<Fragment>fragList=newArrayList<Fragment>();//TabLayout的標題List<String>titleList=newArrayList<String>();publicDetailFragmentPagerAdapter(FragmentManagerfm,List<Fragment>fragList,List<String>titleList){super(fm);this.fragList=fragList;this.titleList=titleList;}@OverridepublicintgetCount(){//返回ViewPager的頁數returnfragList.size();}@OverridepublicFragmentgetItem(intp1){//返回每一個碎片returnfragList.get(p1);}@OverridepublicCharSequencegetPageTitle(intposition){//返回TabLayout的標題returntitleList.get(position).toString();}}

④為ViewPager設置適配器,並做到與TabLayout的聯動

DetailFragmentPagerAdapteradapter=newDetailFragmentPagerAdapter(getSupportFragmentManager(),fragList,movieSource);viewPager.setAdapter(adapter);

//這一句呼應適配器中重寫的getPageTitle方法,如果沒有TabLayout,那麼它們便不用寫

tabLayout.setupWithViewPager(viewPager);

2.遇到的問題

這里遇到的問題不是這個組合所產生的,而是由於控件嵌套使用造成的,比如:

①NestedScrollView嵌套ViewPager造成的

ViewPager不顯示(猜想是高度為0,沒有繪制出來)

不知道什麼原因,高度設置match或者wrap都不管用。

搜尋一圈,解決方法如下:

設置NestedScrollView的fillViewPort屬性true|設置ViewPager為固定高度|動態計算ViewPager內容的高度並賦值

我選了第一個,本來想選第三個,那是最優的解決辦法,但是實在是搞不出來,以後有時間再說。

②NestedScrollView嵌套GridView,GridView無法滾動、顯示不全典型的滑動衝突,滑動操作全部被NestedScrollView消費掉了,解決辦法:

自定義NestedScrollView,重寫onInterceptTouchEvent方法

publicclassDetailNestedScrollViewextendsNestedScrollView{publicDetailNestedScrollView(Contextcontext){super(context);}publicDetailNestedScrollView(Contextcontext,AttributeSetattrs){super(context,attrs);}@OverridepublicbooleanonInterceptTouchEvent(MotionEventev){//TODO:Implementthismethodreturnfalse;}}

當在其子控件上滑動時,不再由其消費滑動。顯示不全,那就給子項的布局指定確切的高度。

推薦↓↓↓

?16個技術公眾號】都在這里!

涵蓋:工程師大咖、源碼共讀、工程師共讀、數據結構與算法、黑客技術和網路安全、大數據科技、編程前端、Java、Python、Web編程開發、Android、iOS開發、Linux、數據庫研發、幽默工程師等。

覺得我們「好看」的點亮它~

分享到Facebook

 


不知道如何找適合的對象?歡迎加官方LINE → Line ID:@shesay
戀愛小秘書免費一對一諮詢!
✔追蹤我的YouTube:https://www.youtube.com/@datenami
✔追蹤我的TikTok:https://www.tiktok.com/@datnami

 

配對成功的關鍵:參加實體交友活動

erose主題派對與戀愛小秘書創辦人娜米表示:「透過各種有趣的實體活動,不僅能親眼真實見到異性,也能在活動進行中讓大家很輕鬆自然的認識彼此、聊天互動,能更快速的找到適合的對象。」

結合大數據用心篩選 + 客製化條件配對

戀愛小秘書團隊已經成功替4000位以上的未婚男女配對成功,這個驚人成果背後的秘密在於「高度客製化服務」,跟每位客戶深度訪談,瞭解客戶真正的特質及需求,從「契合度」提高速配率。

訪談結果結合專屬的人格分析測驗與數據配對分析,精緻化的操作,締造高速配率!

除此之外,戀愛小秘書團隊還會定期追蹤客戶的後續狀況,目的是希望協助客戶發展長期且穩定的伴侶關係。

實名認證防造假!隱私保護最安心!

採用「實名認證」的制度,不僅是把關顧客的身份,避免已婚人士或動機不單純者的加入,更對客戶資料嚴格保密,讓客戶們能在安全且有隱私的狀況下認識另一半。

多元有趣的主題活動,豐富你的社交生活

戀愛小秘書團隊每個月都會規劃豐富多元的實體活動,從戶外踏青、娛樂遊戲、手作、料理課程到桌遊活動,希望客戶們能從歡樂的氣氛中認識彼此。

透過實體活動讓大家先有初步的接觸,然後再為會員們做「客製化」的約會安排。

另外針對想提升自身魅力的客戶,也有投資理財、形象穿搭等講座可供選擇。

追求脫單,先勇敢跨出你的第一步

許多單身者為了心中理想的對象條件,在還沒認識新朋友時,就先限制了自己。建議以認識新朋友的心態,積極參與活動,並適當的設限,才能真正為自己帶來戀愛的機會!勇敢跨出第一步吧!

♡ 現在就和戀愛小秘書娜米聊聊吧Line ID:@shesay

♡ 追蹤娜米的臉書粉絲團

她來報好康

 

SheSay 專注在 兩性、愛情等領域
建立專屬女生觀點的品牌形象
堅持「在第一時間掌握男女的時事議題」
將時下最流行的話題網羅、呈現。

馬上測算你的戀愛密碼

戀愛小秘書-娜米

單身很久?一直被分手?
從生日就看出你的戀愛疑難雜症!
娜米的戀愛數字密碼來幫你了。