SlidingMenu和日夜间模式结合使用
2017-06-17 09:47
330 查看
先来看下布局文件:
建一个anim文件夹下需要存放的xml文件:
第一个:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="0"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0"></alpha>
</set>
第二个:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="0"
android:fromAlpha="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="0.0">
</alpha>
</set>
main布局文件只需要一张图片或按钮供点击侧滑打开和关闭即可。
在侧滑中点击切换日夜间模式的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_weight="1"></ListView>
<Button
android:id="@+id/riye"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="切换日夜"/>
</LinearLayou
还需在stlye中设置黑夜主题:
<!--黑夜主题-->
<style parent="Theme.AppCompat" name="AppTheme.Black"/>
values文件夹下的dimens.xml中写
<dimen name="slidingmenu_offset">60dp</dimen>
<dimen name="shadow_width">15dp</dimen>
接下来就上代码了:
记录日夜间模式切换状态的sp:
public class Preferences {
private static final String shared_name = "user_guide";
private static SharedPreferences sp;
public static String getString(Context context, String key, String defaultValues) {
SharedPreferences sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE);
return sp.getString(key, defaultValues);
}
public static void setString(Context context, String key, String Values) {
SharedPreferences sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE);
sp.edit().putString(key, Values).commit();
}
}
通过记录保存的状态使用工具类切换日夜间模式:
public class UiUtils {
//获取主题
public static int getAppTheme(Context ctx) {
String value = Preferences.getString(ctx, "activity_theme", "1");
switch (Integer.valueOf(value)) {
case 1:
return R.style.AppTheme;//白色主题
case 2:
return R.style.AppTheme_Black;
default:
return R.style.AppTheme;//默认白色
}
}
//切换主题
//当然也可以使用资源ID来进行标记
public static void switchAppTheme(Context ctx) {
String value = Preferences.getString(ctx, "activity_theme", "1");
switch (Integer.valueOf(value)) {
case 1:
Preferences.setString(ctx, "activity_theme", "2");
break;
case 2:
Preferences.setString(ctx, "activity_theme", "1");
break;
default:
Preferences.setString(ctx, "activity_theme", "1");
break;
}
}
}
最重要的核心代码在这里,Mainactivity的代码:
public class MainActivity extends AppCompatActivity {
private SlidingMenu menu;
private int theme = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//切换主题必须放在onCreate()之前
if (savedInstanceState == null) {
theme = UiUtils.getAppTheme(MainActivity.this);
} else {
theme= savedInstanceState.getInt("theme");
}
setTheme(theme);
setContentView(R.layout.activity_main);
ImageView im = (ImageView) findViewById(R.id.images);
im.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
menu.toggle();
}
});
Slidings(savedInstanceState);
}
private void Slidings(Bundle savedInstanceState) {
menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT);
//设置触摸的模式
/**
* TOUCHMODE_FULLSCREEN装满屏幕
*TOUCHMODE_MARGIN 边缘
* TOUCHMODE_NONE 没有
*/
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setShadowWidthRes(R.dimen.shadow_width);
//menu.setShadowDrawable(R.color.colorAccent);
//设置滑动的菜单的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置渐入渐出效果的值
menu.setFadeDegree(0.35f);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
//为侧滑菜单设置布局
View view = View.inflate(MainActivity.this, R.layout.lete_cela, null);
Button but = (Button) view.findViewById(R.id.riye);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UiUtils.switchAppTheme(MainActivity.this);
reload();
}
});
menu.setMenu(view);
}
public void reload() {
Intent intent = getIntent();
overridePendingTransition(R.anim.activity_in, R.anim.activity_out);//进入动画
finish();
overridePendingTransition(R.anim.activity_in, R.anim.activity_out);
startActivity(intent);
}
}
建一个anim文件夹下需要存放的xml文件:
第一个:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="0"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0"></alpha>
</set>
第二个:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="0"
android:fromAlpha="1.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:toAlpha="0.0">
</alpha>
</set>
main布局文件只需要一张图片或按钮供点击侧滑打开和关闭即可。
在侧滑中点击切换日夜间模式的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_weight="1"></ListView>
<Button
android:id="@+id/riye"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="切换日夜"/>
</LinearLayou
还需在stlye中设置黑夜主题:
<!--黑夜主题-->
<style parent="Theme.AppCompat" name="AppTheme.Black"/>
values文件夹下的dimens.xml中写
<dimen name="slidingmenu_offset">60dp</dimen>
<dimen name="shadow_width">15dp</dimen>
接下来就上代码了:
记录日夜间模式切换状态的sp:
public class Preferences {
private static final String shared_name = "user_guide";
private static SharedPreferences sp;
public static String getString(Context context, String key, String defaultValues) {
SharedPreferences sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE);
return sp.getString(key, defaultValues);
}
public static void setString(Context context, String key, String Values) {
SharedPreferences sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE);
sp.edit().putString(key, Values).commit();
}
}
通过记录保存的状态使用工具类切换日夜间模式:
public class UiUtils {
//获取主题
public static int getAppTheme(Context ctx) {
String value = Preferences.getString(ctx, "activity_theme", "1");
switch (Integer.valueOf(value)) {
case 1:
return R.style.AppTheme;//白色主题
case 2:
return R.style.AppTheme_Black;
default:
return R.style.AppTheme;//默认白色
}
}
//切换主题
//当然也可以使用资源ID来进行标记
public static void switchAppTheme(Context ctx) {
String value = Preferences.getString(ctx, "activity_theme", "1");
switch (Integer.valueOf(value)) {
case 1:
Preferences.setString(ctx, "activity_theme", "2");
break;
case 2:
Preferences.setString(ctx, "activity_theme", "1");
break;
default:
Preferences.setString(ctx, "activity_theme", "1");
break;
}
}
}
最重要的核心代码在这里,Mainactivity的代码:
public class MainActivity extends AppCompatActivity {
private SlidingMenu menu;
private int theme = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//切换主题必须放在onCreate()之前
if (savedInstanceState == null) {
theme = UiUtils.getAppTheme(MainActivity.this);
} else {
theme= savedInstanceState.getInt("theme");
}
setTheme(theme);
setContentView(R.layout.activity_main);
ImageView im = (ImageView) findViewById(R.id.images);
im.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
menu.toggle();
}
});
Slidings(savedInstanceState);
}
private void Slidings(Bundle savedInstanceState) {
menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT);
//设置触摸的模式
/**
* TOUCHMODE_FULLSCREEN装满屏幕
*TOUCHMODE_MARGIN 边缘
* TOUCHMODE_NONE 没有
*/
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setShadowWidthRes(R.dimen.shadow_width);
//menu.setShadowDrawable(R.color.colorAccent);
//设置滑动的菜单的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置渐入渐出效果的值
menu.setFadeDegree(0.35f);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
//为侧滑菜单设置布局
View view = View.inflate(MainActivity.this, R.layout.lete_cela, null);
Button but = (Button) view.findViewById(R.id.riye);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UiUtils.switchAppTheme(MainActivity.this);
reload();
}
});
menu.setMenu(view);
}
public void reload() {
Intent intent = getIntent();
overridePendingTransition(R.anim.activity_in, R.anim.activity_out);//进入动画
finish();
overridePendingTransition(R.anim.activity_in, R.anim.activity_out);
startActivity(intent);
}
}
相关文章推荐
- 如何将多种设计模式结合使用(源代码)
- 扩展无极限:工厂设计模式与C#扩展方法的结合使用
- 设计模式实现(二)---策略模式、策略模式与简单工厂模式结合使用
- Spring中Template模式与callback的结合使用浅析
- 简单工厂模式和策略模式结合使用php
- 将多种设计模式结合使用
- SlidingMenu的使用,结合Fragment(eclipse环境)
- 结合SQLiteOpenHelper使用单例模式
- javascript创建对象之函数构造模式和原型模式结合使用(四)
- 单例模式结合享元模式的使用
- 结合session使用lucene单例模式
- 非阻塞socket与epoll的ET模式结合使用注意事项
- java 反射和 工厂模式结合使用
- 开源项目SlidingMenu和ActionBarSherlock结合使用
- callable结合FutureTask的多线程使用(免打扰模式)
- php单件模式结合命令链模式使用说明
- callable结合FutureTask的多线程使用(免打扰模式)
- Android WindowManager的使用 & 添加 遮罩层 实现夜间模式
- 策略模式与简单工厂模式的结合使用
- 反射机制和工厂设计模式结合使用