| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / Mobile 编程 / Android 安卓 /
 

AppCompatActivity使用

来源(CSDN博客)

From: https://blog.csdn.net/xiongge358/article/details/50687504

AppCompatActivity使用

原创 2016年02月18日 17:23:02

标签:android / AppCompat / android studio /

使用

· 支持包更新到22.1之后,Android Studio项目的Activity默认继承这个类。

· ActionBarActivity已替代ActionBarActivity

这并不只是命名的改变,内部实现原理其实是通过AppCompatDelegate 来完成的。AppCompatDelegate是一个可以放在任意Activity中,并且回调相应生命周期的类。

· 它的继承和实现

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,
TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider{
	...
}


1. 继承FragmentActivty,不多解释。

2. AppCompatCallback,为了实现这appcompat能够在一定情况下回调。其实它是为AppCompatDelegate的创建,而AppCompatDelegate相当于一个代理,它能为任何的Activity对象提供AppCompatActivity的特性。

3. TaskStackBuilder.SupportParentable,TaskStackBuilder是用于跨任务导航的程序类。正常导航:

此时,创建一个Intent来开始新的任务,同时要提供给它一个back stack以重现在应用程序中正常的回退行为。

特殊导航:

· 此时从通知栏打开活动,用户仅仅看到次活动。

· 从某种意义上说,开启这个活动的目的是展示通知中难以显示的信息。

· 在这种情况下,通过创建Intent来启动新任务,无须创建一个back stack。原因在于,启动的活动并非应用程序活动流的一部分。点击回退键则将把用户直接带回Home屏。

这里说到了PendingIntent,没错,实现SupportParentable的话它会要求重写以获得PendingIntent

public interface SupportParentable {
	Intent getSupportParentActivityIntent();
}



public TaskStackBuilder addParentStack(Activity sourceActivity) {
	Intent parent = null;
	if (sourceActivity instanceof SupportParentable) {
		parent = ((SupportParentable) sourceActivity).getSupportParentActivityIntent();
	}
	if (parent == null) {
		parent = NavUtils.getParentActivityIntent(sourceActivity);
	}

	if (parent != null) {
		// We have the actual parent intent, build the rest from static metadata
		// then add the direct parent intent to the end.
		ComponentName target = parent.getComponent();
		if (target == null) {
			target = parent.resolveActivity(mSourceContext.getPackageManager());
		}
		addParentStack(target);
		addNextIntent(parent);
	}
	return this;
}
//说了这么多,于本章节而说并无多大用处。


4. ActionBarDrawerToggle.DelegateProvider,见名思意,实现它能提供了Delegate。而Delegate这个类可以干嘛呢?

它能设置Action Bar指示的drawable和内容描述

提供ActionBar的context,指示的drawable,返回的图标是否可见等

让你能简单的使用它的一些AppCompatActivity特性。

这里用到ToolBar来代替ActionBar

· 开始使用

注意文件styles.xml,要使用Theme.AppCompat.NoActionBar这个主题,不然后面会导致你重复添加报错:

<resources>

	<style name="AppBaseTheme" parent="Theme.AppCompat.NoActionBar">

		<!-- colorPrimaryDark(状态栏底色-->
		<item name="colorPrimaryDark">@android:color/transparent</item>
	</style>

	<style name="AppTheme" parent="AppBaseTheme"></style>
</resources>


· 在layout下新建一个xml文件,包含ToolBar:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:app="http://schemas.android.com/apk/res-auto"
	android:id="@+id/toolbar"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:background="?attr/colorPrimary"
	android:minHeight="?attr/actionBarSize" >

	<TextView
		android:id="@+id/toolbar_title"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_gravity="center"
		android:text="Toolbar Title"
		android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.Toolbar>


· 布局文件activity_main中include进去Toolbar,ToolBar 有高度的灵活性,可以放在布局中的任意位置。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
	android:layout_height="match_parent"
	tools:context=".MainActivity">
	<include
		layout="@layout/toolbar"
	/>
</RelativeLayout>


· Activity中进行初始化

public class MainActivity extends AppCompatActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();

	}

	private void init(){
		Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
		setSupportActionBar(toolbar);


Toolbar的用法就不在这里相叙了

Link: http://www.asm32.net/article_details.aspx?id=7289


浏览次数 0 发布时间 2018/4/11 23:53:25 从属分类 Android 安卓 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1