您的位置:首页 > 其它

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);

    }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: