Android抽屉效果集成
2017-07-11 本文已影响217人
元创造力
先看集成效果
drawerDemo.gif集成步骤:
1.新建一个Android studio工程:
2.添加依赖
compile 'com.ikimuhendis:ldrawer:0.1'
3.编写activity_main.xml文件
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
// 主界面的布局
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Android drawer icon with material design animation"/>
</RelativeLayout>
//抽屉界面的布局
<!-- The navigation drawer -->
<ListView
android:id="@+id/navdrawer"
android:layout_width="260dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:drawSelectorOnTop="false">
</ListView>
</android.support.v4.widget.DrawerLayout>
4.编写MainActivity.class代码
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerArrowDrawable drawerArrow;
private boolean drawerArrowColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar ab = getActionBar();
ab.setDisplayHomeAsUpEnabled(true);
ab.setHomeButtonEnabled(true);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.navdrawer);
drawerArrow = new DrawerArrowDrawable(this) {
@Override
public boolean isLayoutRtl() {
return true;
}
};
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
drawerArrow, R.string.drawer_open,
R.string.drawer_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
String[] values = new String[]{
"Stop Animation (Back icon)",
"Stop Animation (Home icon)",
"Start Animation",
"Change Color",
"GitHub Page",
"Share",
"Rate"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0:
mDrawerToggle.setAnimateEnabled(false);
drawerArrow.setProgress(1f);
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
break;
case 1:
mDrawerToggle.setAnimateEnabled(false);
drawerArrow.setProgress(0f);
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
break;
case 2:
mDrawerToggle.setAnimateEnabled(true);
mDrawerToggle.syncState();
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
break;
case 3:
if (drawerArrowColor) {
drawerArrowColor = false;
drawerArrow.setColor(R.color.ldrawer_color);
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
} else {
drawerArrowColor = true;
drawerArrow.setColor(R.color.drawer_arrow_second_color);
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
}
mDrawerToggle.syncState();
break;
case 4:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/IkiMuhendis/LDrawer"));
startActivity(browserIntent);
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
break;
case 5:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.putExtra(Intent.EXTRA_SUBJECT,
getString(R.string.app_name));
share.putExtra(Intent.EXTRA_TEXT, getString(R.string.app_description) + "\n" +
"GitHub Page : https://github.com/IkiMuhendis/LDrawer\n" +
"Sample App : https://play.google.com/store/apps/details?id=" +
getPackageName());
startActivity(Intent.createChooser(share,
getString(R.string.app_name)));
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
break;
case 6:
String appUrl = "https://play.google.com/store/apps/details?id=" + getPackageName();
Intent rateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appUrl));
startActivity(rateIntent);
mDrawerLayout.closeDrawer(Gravity.LEFT,true);
break;
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
} else {
mDrawerLayout.openDrawer(mDrawerList);
}
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
注意:MainActivity继承的是Activity而不是AppCompatActivity,否则获取到的ActionBar对象ActionBar ab = getActionBar()会为空
5.配置主题,在res/values/styles文件夹中自定义一个主题
<style name="ActionBar" parent="android:Widget.ActionBar">
<item name="android:background">@color/actionbar_color</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:titleTextStyle">@style/ActionBar.TitleText</item>
</style>
<style name="ActionBar.TitleText" parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@android:color/white</item>
<item name="android:textSize">18sp</item>
</style>
然后在清单文件AndroidManifest.xml中应用自定义的主题ActionBar:
image.png注意:也可以使用其他主题,但是必须使用含有ActionBar的主题,否则getActionBar会为空,报空指针异常
6.项目中用到的一些资源
在res/values/string中定义
<string name="app_description">Android drawer icon with material design animation</string>
<string name="drawer_open">drawer_open</string>
<string name="drawer_close">drawer_close</string>
在res/values/colors中定义
<color name="actionbar_color">#bf360c</color>
<color name="drawer_arrow_second_color">#303f9f</color>
Demo git地址:https://github.com/xinhuashi/LDrawerDemo.git