androiddrawerlayout
『壹』 android 我用drawerlayout弄了個右滑抽屜
因為滑出的菜單欄 沒有處理觸發事件 所以才導致下層的ListView捕獲監聽 一個很簡單的解決辦法 給整個菜單布局 加一個setOnTouchListener 重寫ontouch方法 返回true 就OK了
『貳』 android drawerlayout一點就沒
drawerlayout本身不上下滑動,要添加ScrollView,ListView或者NavigationView.
『叄』 Android的drawerlayout側拉出的菜單如何添加fragment呢
在Android support.v4 中有一個抽屜視圖控制項DrawerLayout。使用這個控制項,可以生成通過在屏幕上水平滑動打開或者關閉菜單,能給用戶一個不錯的體驗效果。
最近在項目中,設計中有用到這個效果,但是是左右兩邊都能劃出這樣的一個菜單效果。經過使用發現,在xml布局中和代碼中,幾乎是添加添加同樣的代碼,就可以實現這種作用兩種菜單的效果。
『肆』 Android DrawerLayout怎麼設置背景圖案
DrawerLayout組件同樣是V4包中的組件,也是直接繼承於ViewGroup類,所以這個類也是一個容器類。使用DrawerLayout可以輕松的實現抽屜效果,使用DrawerLayout的步驟有以下1幾點:
1)在DrawerLayout中,第一個子View必須是顯示內容的view,並且設置它的layout_width和layout_height屬性是match_parent.
2)第二個view是抽屜view,並且設置屬性layout_gravity="left|right",表示是從左邊滑出還是右邊滑出。設置它的layout_height="match_parent"
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="content" />
<ListView
android:id="@+id/listview"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#FFB5C5" />
</android.support.v4.widget.DrawerLayout>
在第二個View中設置背景
『伍』 android怎麼禁止drawlayout拉出
android實現禁止drawlayout拉出
工具
Toolbar
方法
1. ActionBar替換設置
values下設置styles.xml 為NoActionBar
『陸』 簡書· Android 中 DrawerLayout + ViewPager 怎麼解決滑動沖突
首先,要使用該控制項就需要添加design library,在android studio(還沒有使用Android studio的小夥伴們要趕緊更換啦)中添加依賴
compile 『com.android.support:design:22.2.0』
然後再布局文件中使用TabLayout
<android.support.design.widget.TabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />12345
緊接著在下面添加ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tablayout" />12345
布局文件完成了,接下來去定義ViewPager中的適配器,這里我使用的是Fragment,所以繼承自FragmentPagerAdapter ,代碼如下:
public class MyPageAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> datas;
ArrayList<String> titles;
public CommunityPageAdapter(FragmentManager fm) {
super(fm);
}
public void setData(ArrayList<Fragment> datas) {
this.datas = datas;
}
public void setTitles(ArrayList<String> titles) {
this.titles = titles;
}
@Override
public Fragment getItem(int position) {
return datas == null ? null : datas.get(position);
}
@Override
public int getCount() {
return datas == null ? 0 : datas.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles == null ? null : titles.get(position);
}
}
適配器中需要兩個數據集合,分配填充Fragment和顯示的標題。
然後在需要使用的頁面添加如下代碼:
MyPageAdapter myPageAdapter = new MyPageAdapter(getFragmentManager());
ArrayList<Fragment> datas = new ArrayList<Fragment>();
datas.add(new AFragment());
datas.add(new BFragment());
datas.add(new CFragment());
myPageAdapter.setData(datas);
ArrayList<String> titles = new ArrayList<String>();
titles.add("A");
titles.add("B");
titles.add("C");
myPageAdapter.setTitles(titles);12345678910111213
現在適配器和數據已經准備好了,那麼接下來就是要把數據放入ViewPager中,並使ViewPager和TabLayout相關聯:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
// 將適配器設置進ViewPager
viewPager.setAdapter(myPageAdapter);
// 將ViewPager與TabLayout相關聯
tabLayout.setupWithViewPager(viewPager);123456
關聯之後運行發現,其實ViewPager由於預載入機制,導致每次都會提前載入下一個頁面,如果頁面的數據量大,那麼這將會佔用大量的內存,有什麼辦法可以只載入當前顯示的頁面呢看
通過查找相關資料發現,有一個方法setOffscreenPageLimit(int),該方法的作用是設置提前載入頁面的數量,嘗試使用viewPager.setOffscreenPageLimit(0);後發現無效。
繼續查閱資料後發現,原來這是由於ViewPager的機制導致的,最少需要預載入一個頁面,Requested offscreen page limit 0 too small; defaulting to 1,相關問題鏈接:
發現了可以完美解決該問題的方法:
在Fragment中有一個方法,setUserVisibleHint,該方法可以獲取當前頁面的展示情況
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// 頁面正在展示,在這里載入你的數據
}else{
// 頁面沒有展示
}
}12345678910
基本到這一步功能已經實現了,但是,還有一些細節需要注意,到底ViewPager滑動的時候為什麼會造成TabLayout的標題也隨之更換呢看原來setupWithViewPager被調用的時候,執行了下面的代碼
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(this));
this.setOnTabSelectedListener(new TabLayout.(viewPager));
到最後,還有一個問題,那麼就是如果我們的標題有多條,導致超出了TabLayout的顯示範圍,這該如何解決呢看很簡單,查閱官方API發現,TabLayout有一個方法是setTabMode,它是用來設置TabLayout的展示模式,而這個方法接受兩個常量,MODE_SCROLLABLE 以及 MODE_FIXED,顯而易見,當我們設置為MODE_SCROLLABLE 它就能自動根據標題的數量,滑動展示啦,功能到這里就完美實現了!
『柒』 android編程Drawerlayout問題
packagecom.xiaolangcai.lasttime;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.app.ActionBar;
importandroid.app.Fragment;
importandroid.app.FragmentManager;
importandroid.os.Bundle;
importandroid.support.v4.app.FragmentActivity;
importandroid.support.v4.widget.DrawerLayout;
importandroid.view.LayoutInflater;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.ListView;
importandroid.widget.TextView;
importandroid.os.Build;
{
privateButtonmDrawerButton;
privateTextViewtitle;
;
privateListViewmDrawerList;
privateString[]menus;
privateList<Fragment>fragments;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
setAdapter();
setListener();
if(savedInstanceState==null){
getFragmentManager().beginTransaction()
.add(R.id.container,newPlaceholderFragment()).commit();
selectItem(0);
}
}
privatevoidsetListener(){
//TODOAuto-generatedmethodstub
mDrawerButton.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
if(mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawer(mDrawerList);
}else{
mDrawerLayout.openDrawer(mDrawerList);
}
}
});
mDrawerList.setOnItemClickListener(newOnItemClickListener(){
@Override
publicvoidonItemClick(AdapterView<?>adapterView,Viewv,intposition,
longid){
selectItem(position);
}
});
}
privatevoidsetAdapter(){
//TODOAuto-generatedmethodstub
mDrawerList.setAdapter(newArrayAdapter<String>(this,R.layout.drawer_list_item,menus));
}
privatevoidinit(){
//TODOAuto-generatedmethodstub
mDrawerButton=(Button)findViewById(R.id.left);
title=(TextView)findViewById(R.id.title);
mDrawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList=(ListView)findViewById(R.id.drawer_list);
menus=newString[]{
"Home","Mercury","Venus","Mars","About","Setting"
};
fragments=newArrayList<Fragment>();
fragments.add(Homefragment.newInstance("Home"));
fragments.add(Mercuryfragment.newInstance("Mercury"));
fragments.add(Venusfragment.newInstance("Venus"));
fragments.add(Marsfragment.newInstance("Mars"));
fragments.add(Aboutfragment.newInstance("About"));
fragments.add(Settingfragment.newInstance("Setting"));
}
privatevoidselectItem(inti){
//TODOAuto-generatedmethodstub
Fragmentfragment=fragments.get(i);
FragmentManagermanager=getFragmentManager();
manager.beginTransaction().replace(R.id.content_frame,fragment).commit();
title.setText(menus);
mDrawerList.setItemChecked(i,true);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
(Menumenu){
//Inflatethemenu;.
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
}
@Override
(MenuItemitem){
//Handleactionbaritemclickshere.Theactionbarwill
///Upbutton,solong
//.xml.
intid=item.getItemId();
if(id==R.id.action_settings){
returntrue;
}
returnsuper.onOptionsItemSelected(item);
}
/**
*.
*/
{
publicPlaceholderFragment(){
}
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
ViewrootView=inflater.inflate(R.layout.fragment_main,container,
false);
returnrootView;
}
}
}
『捌』 android中我使用了drawerlayout實現側滑菜單,主界面是一個listview,為什麼
給側滑菜單布局添加屬性android:clickable="true"
『玖』 android 怎樣讓drawerlayout設置的側滑菜單的內容充滿屏幕
布局文件中使用drawerLayout ,下麵包含兩個區,主內容區的布局代碼要放在側滑菜單布局的前面,側滑菜單的部分的布局可以設置layout_gravity屬性來表示在左邊還是右邊。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
看代碼很清楚,但是如果說要讓側滑出來的菜單內容占滿整個屏幕的話,需要自己知道屏幕的width,ListView也就是菜單布局width設置一樣就可以了(不過設置為math_parent也大概只佔了百分之90左右,並不能完全覆蓋掉)。
『拾』 android編程Drawerlayout布局中加入activity
一般如此,但也可以不用layout布局,而直接在activity中用java代碼進行布局。 另外,一個layout布局,也可以被多個activity使用。