SlidingMenu和日夜间模式结合使用

来源:互联网 发布:ap网络架构 编辑:程序博客网 时间:2024/06/11 16:28

先来看下布局文件:

建一个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);

    }
    }




原创粉丝点击