A light tool sdk include: Activity without 声明 in manifest,SystemBar一体化,Activity和Frament状态存储
demo apk
在gradle里引入:compile 'org.ayo:ayo-attacher:1.0.0'
Manifest中的声明:
<activity
android:name="com.cowthan.sample.MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden|navigation"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="org.ayo.attacher.TmplActivityStandard"
android:configChanges="orientation|screenSize|keyboardHidden|navigation"
android:screenOrientation="portrait"
android:launchMode="standard"
android:theme="@style/AyoTransparentTheme" />
<activity
android:name="org.ayo.attacher.TmplActivitySingleTask"
android:configChanges="orientation|screenSize|keyboardHidden|navigation"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:theme="@style/AyoTransparentTheme" />
<activity
android:name="org.ayo.attacher.TmplActivitySingleTop"
android:configChanges="orientation|screenSize|keyboardHidden|navigation"
android:screenOrientation="portrait"
android:launchMode="singleTop"
android:theme="@style/AyoTransparentTheme" />
<activity
android:name="org.ayo.attacher.TmplActivitySingleInstance"
android:configChanges="orientation|screenSize|keyboardHidden|navigation"
android:screenOrientation="portrait"
android:launchMode="singleInstance"
android:theme="@style/AyoTransparentTheme" />
看代码,这两个只有基类不一样,内部代码应该是一样的,其中继承AyoActivity的是一个普通Activity,需要去manifest声明, 而继承AyoActivityAttacher,就不需要再去manifest声明了
public class SampleActivity extends AyoActivityAttacher{
public static void start(Context c, boolean takeSystemBar, int lanuchMode, OnResultCallBack callBack){
SimpleBundle sb = new SimpleBundle();
sb.putExtra("takeSystemBar", takeSystemBar);
ActivityAttacher.startActivity(c, SampleActivity.class, sb, false, lanuchMode, callBack);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_tmpl);
}
}
public class SampleActivity extends AyoActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_tmpl);
}
}
启动方式变成这样:
public static void start(Context c, boolean takeSystemBar, int lanuchMode, OnResultCallBack callBack){
SimpleBundle sb = new SimpleBundle();
sb.putExtra("takeSystemBar", takeSystemBar);
ActivityAttacher.startActivity(c, SampleActivity.class, sb, false, lanuchMode, callBack);
}
boolean takeSystemBar = getIntent().getBooleanExtra("takeSystemBar");
getResultCallback().onResult("代替OnActivityReslt和setResult"); finish();
这里提供了两个主题:AyoTransparentTheme和AyoTheme,没啥特殊的
问题1:颜色设置,可以开启和关闭,分status bar和navigation bar
问题2:是否侵入,可以开启和关闭,和颜色设置不冲突
代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_ac_main);
//关闭StatusBar和NavigationBar侵入
getAgent().enableSystemBarTakenByContent(false);
//给StatusBar和NavigaionBar染色
getAgent().renderSystemBar(Color.parseColor("#55ff0000"), Color.parseColor("#55ff0000"));
}
android:fitsSystemWindows
属性fitSystemWindows是true时:enableSystemBarTakenByContent(false),内容给SystemBar留空
fitSystemWindows是false时:enableSystemBarTakenByContent(true),内容侵入SystemBar
https://github.com/frankiesardo/icepick
关于clipToPadding和clipToChildren:默认都为true http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0317/2613.html
好像和滚动有关,可以上下滚动时,内容是否可以滚动到标题栏里
<ListView
android:layout_gravity="center_vertical"
android:id="@+id/list"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingTop="50dip"
android:layout_width="match_parent"
android:layout_height="match_parent" />
ListView初始化之后,由于top的50dp的padding,看似顶着标题栏,但往上滚动时,内容就会跑到padding的50dp里,也就能从标题栏看到了(如果标题栏带透明)