zoukankan      html  css  js  c++  java
  • Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置

    Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置

    2013年8月14日Android记录

    很多应用都会有用户设置,用户的一些偏好可以由用户来决定那是应用人性化的体现,在实际开发中很多情况都作成可配置的了,本篇博客要介绍的是一个比较炫的状态按钮切换,我想很多开发者都想做出这样的效果,在这里我也就把自己参与的项目当中的这部分实现,做出Demo来于朋友们分享。

    没有图,我感觉就特别不舒服:
     
     


    这样看没办法看出效果,如果能做出动态图就好了,下次吧。

    除了ToggleButton的自定义之外,用户配置的信息也是要保存起来的,每一次启动程序的时候要能保证使用的是之前的配置,而不是默认配置,在这里使用SharedPreferences是最好的选择了。

    想要源码的猛戳这里:http://download.csdn.net/detail/wwj_748/5945829


    布局文件:
    /2013.08.14_ToggleButton_demo/res/layout/settings.xml
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        android:orientation="vertical" >
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/banner_bg" >
    
            <TextView
                android:id="@+id/tv_Title"
                android:layout_width="wrap_content"
                android:layout_height="42dp"
                android:layout_centerHorizontal="true"
                android:gravity="center"
                android:text="设置"
                android:textColor="#ffffff"
                android:textSize="22sp" />
        </RelativeLayout>
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
    
                <LinearLayout
                    android:id="@+id/layout_AutoPlay"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/item_short_bg_selector"
                    android:gravity="center_vertical" >
    
                    <TextView
                        android:id="@+id/tv_AutoPlay"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="10dp"
                        android:layout_weight="1"
                        android:focusable="false"
                        android:singleLine="true"
                        android:text="自动播放"
                        android:textColor="#7a6f66"
                        android:textSize="18sp" />
    
                    <RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="10dp" >
    
                        <ToggleButton
                            android:id="@+id/toggle_AutoPlay"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="@drawable/toggle_selector"
                            android:gravity="left|center_vertical"
                            android:paddingLeft="14dp"
                            android:paddingRight="14dp"
                            android:textColor="#ffffff"
                            android:textOff="OFF"
                            android:textOn="ON" />
    
                        <ImageButton
                            android:id="@+id/toggleButton_AutoPlay"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignRight="@+id/toggle_AutoPlay"
                            android:background="#00000000"
                            android:src="@drawable/progress_thumb_selector" />
                    </RelativeLayout>
                </LinearLayout>
    
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:scaleType="fitXY"
                    android:src="@drawable/list_divider" />
    
                <LinearLayout
                    android:id="@+id/layout_StartOnBoot"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/item_short_bg_selector"
                    android:gravity="center_vertical" >
    
                    <TextView
                        android:id="@+id/tv_StartOnBoot"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="10dp"
                        android:layout_weight="1"
                        android:focusable="false"
                        android:singleLine="true"
                        android:text="开机自启动"
                        android:textColor="#7a6f66"
                        android:textSize="18sp" />
    
                    <RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="10dp" >
    
                        <ToggleButton
                            android:id="@+id/toggle_StartOnBoot"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="@drawable/toggle_selector"
                            android:gravity="left|center_vertical"
                            android:paddingLeft="14dp"
                            android:paddingRight="14dp"
                            android:textColor="#ffffff"
                            android:textOff="OFF"
                            android:textOn="ON" />
    
                        <ImageButton
                            android:id="@+id/toggleButton_StartOnBoot"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignRight="@+id/toggle_StartOnBoot"
                            android:background="#00000000"
                            android:src="@drawable/progress_thumb_selector" />
                    </RelativeLayout>
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
    
    </LinearLayout>


    哪些selector文件的代码就不贴了,自己看源码吧


    Activity文件
    /2013.08.14_ToggleButton_demo/src/com/wwj/toggle/Setting.java
    package com.wwj.toggle;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import android.widget.LinearLayout;
    import android.widget.RelativeLayout;
    import android.widget.ToggleButton;
    
    /**
     * 自定义ToggleButton的例子
     * 
     * @author wwj 2013年8月14
     */
    public class Setting extends Activity {
    
    	private LinearLayout layout_AutoPlay;
    	private LinearLayout layout_StartOnBoot;
    	private ToggleButton toggle_AutoPlay;
    	private ToggleButton toggle_StartOnBoot;
    	private ImageButton toggleButton_AutoPlay;
    	private ImageButton toggleButton_StartOnBoot;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.settings);
    
    		// 找到控件
    		layout_AutoPlay = (LinearLayout) findViewById(R.id.layout_AutoPlay);
    		layout_StartOnBoot = (LinearLayout) findViewById(R.id.layout_StartOnBoot);
    		toggle_AutoPlay = (ToggleButton) findViewById(R.id.toggle_AutoPlay);
    		toggle_StartOnBoot = (ToggleButton) findViewById(R.id.toggle_StartOnBoot);
    		toggleButton_AutoPlay = (ImageButton) findViewById(R.id.toggleButton_AutoPlay);
    		toggleButton_StartOnBoot = (ImageButton) findViewById(R.id.toggleButton_StartOnBoot);
    
    		initViews();
    		setListeners();
    	}
    
    	private void initViews() {
    		// 是否自动播放,获取SharePerference保存的用户配置
    		boolean isAutoPlay = SettingUtils.get(this, SettingUtils.AUTO_PLAY,
    				false);
    		toggle_AutoPlay.setChecked(isAutoPlay);
    		RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toggleButton_AutoPlay
    				.getLayoutParams();
    		if (isAutoPlay) { // 如果是自动播放
    			// 调整位置
    			params.addRule(RelativeLayout.ALIGN_RIGHT, -1);
    			params.addRule(RelativeLayout.ALIGN_LEFT,
    					R.id.toggleButton_AutoPlay);
    			toggleButton_AutoPlay.setLayoutParams(params);
    			toggleButton_AutoPlay
    					.setImageResource(R.drawable.progress_thumb_selector);
    			toggle_AutoPlay.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
    		} else {
    			// 调整位置
    			params.addRule(RelativeLayout.ALIGN_RIGHT, R.id.toggle_AutoPlay);
    			params.addRule(RelativeLayout.ALIGN_LEFT, -1);
    			toggleButton_AutoPlay.setLayoutParams(params);
    			toggleButton_AutoPlay
    					.setImageResource(R.drawable.progress_thumb_off_selector);
    			toggle_AutoPlay.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
    		}
    
    		boolean isAutostart = SettingUtils.get(this,
    				SettingUtils.IS_AUTO_START, true);
    
    		toggle_StartOnBoot.setChecked(isAutostart);
    		RelativeLayout.LayoutParams params3 = (RelativeLayout.LayoutParams) toggleButton_StartOnBoot
    				.getLayoutParams();
    		if (isAutostart) {
    			// 调整位置
    			params3.addRule(RelativeLayout.ALIGN_RIGHT, -1);
    			params3.addRule(RelativeLayout.ALIGN_LEFT, R.id.toggle_StartOnBoot);
    			toggleButton_StartOnBoot.setLayoutParams(params3);
    			toggleButton_StartOnBoot
    					.setImageResource(R.drawable.progress_thumb_selector);
    
    			toggle_StartOnBoot.setGravity(Gravity.RIGHT
    					| Gravity.CENTER_VERTICAL);
    		} else {
    			// 调整位置
    			params3.addRule(RelativeLayout.ALIGN_RIGHT, R.id.toggle_StartOnBoot);
    			params3.addRule(RelativeLayout.ALIGN_LEFT, -1);
    			toggleButton_StartOnBoot.setLayoutParams(params3);
    			toggleButton_StartOnBoot
    					.setImageResource(R.drawable.progress_thumb_off_selector);
    
    			toggle_StartOnBoot.setGravity(Gravity.LEFT
    					| Gravity.CENTER_VERTICAL);
    		}
    	}
    
    	private void setListeners() {
    		toggle_AutoPlay.setOnCheckedChangeListener(new ToggleListener(this,
    				"自动播放", toggle_AutoPlay, toggleButton_AutoPlay));
    		toggle_StartOnBoot.setOnCheckedChangeListener(new ToggleListener(this,
    				"开机自启动", toggle_StartOnBoot, toggleButton_StartOnBoot));
    
    		// UI事件,按钮点击事件
    		OnClickListener clickToToggleListener = new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				toggle_AutoPlay.toggle();
    			}
    		};
    
    		toggleButton_AutoPlay.setOnClickListener(clickToToggleListener);
    		layout_AutoPlay.setOnClickListener(clickToToggleListener);
    
    		// UI事件,按钮点击事件
    		OnClickListener clickToToggleAutostartListener = new OnClickListener() {
    			public void onClick(View v) {
    				toggle_StartOnBoot.toggle();
    			}
    		};
    		toggleButton_StartOnBoot
    				.setOnClickListener(clickToToggleAutostartListener);
    		layout_StartOnBoot
    				.setOnClickListener(clickToToggleAutostartListener);
    	}
    
    }
    

    工具类:
    /2013.08.14_ToggleButton_demo/src/com/wwj/toggle/SettingUtils.java
    package com.wwj.toggle;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.preference.PreferenceManager;
    
    public class SettingUtils {
    	public static final String AUTO_PLAY = "auto_play";	// 自动播放
    	public static final String IS_AUTO_START = "is_auto_start";	// 开机自启动
    	
    	
    	/**
    	 * 获取配置
    	 * @param context
    	 * @param name
    	 * @param defaultValue
    	 * @return
    	 */
    	public static boolean get(Context context, String name, boolean defaultValue) {
    		final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    		boolean value = prefs.getBoolean(name, defaultValue);
    		return value;
    	}
    	
    	/**
    	 * 保存用户配置
    	 * @param context
    	 * @param name
    	 * @param value
    	 * @return
    	 */
    	public static boolean set(Context context, String name, boolean value) {
    		final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    		Editor editor = prefs.edit();
    		editor.putBoolean(name, value);
    		return editor.commit();	//提交
    	}
    }
    

    /2013.08.14_ToggleButton_demo/src/com/wwj/toggle/DisplayUtils.java
    package com.wwj.toggle;
    
    import android.content.Context;
    
    public class DisplayUtils {
    	public static int dip2px(Context context, float dpValue) {
    		final float scale = context.getResources().getDisplayMetrics().density;
    		return (int) (dpValue * scale + 0.5f);
    	}
    
    	public static int px2dip(Context context, float pxValue) {
    		final float scale = context.getResources().getDisplayMetrics().density;
    		return (int) (pxValue / scale + 0.5f);
    	}
    
    	public static int getScreenWidth(Context context) {
    		return context.getResources().getDisplayMetrics().widthPixels;
    	}
    
    	public static int getScreenHeight(Context context) {
    		return context.getResources().getDisplayMetrics().heightPixels;
    	}
    }
    


    /2013.08.14_ToggleButton_demo/src/com/wwj/toggle/ToggleListener.java
    package com.wwj.toggle;
    
    
    import android.content.Context;
    import android.view.Gravity;
    import android.view.animation.TranslateAnimation;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.ImageButton;
    import android.widget.RelativeLayout;
    import android.widget.ToggleButton;
    
    /**
     * 状态按钮的监听事件
     * 
     * @author wwj
     * 
     */
    public class ToggleListener implements OnCheckedChangeListener {
    	private Context context;
    	private String settingName;
    	private ToggleButton toggle;
    	private ImageButton toggle_Button;
    
    	public ToggleListener(Context context, String settingName,
    			ToggleButton toggle, ImageButton toggle_Button) {
    		this.context = context;
    		this.settingName = settingName;
    		this.toggle = toggle;
    		this.toggle_Button = toggle_Button;
    	}
    
    	@Override
    	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    		// 保存设置
    		if ("自动播放".equals(settingName)) {
    			SettingUtils.set(context, SettingUtils.AUTO_PLAY, isChecked);
    		} else if ("开机自启动".equals(settingName)) {
    			SettingUtils.set(context, SettingUtils.IS_AUTO_START, isChecked);
    		}
    		// 播放动画
    		RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toggle_Button
    				.getLayoutParams();
    		if (isChecked) {
    			// 调整位置
    			params.addRule(RelativeLayout.ALIGN_RIGHT, -1);
    			if ("自动播放".equals(settingName)) {
    				params.addRule(RelativeLayout.ALIGN_LEFT, R.id.toggle_AutoPlay);
    			} else if ("开机自启动".equals(settingName)) {
    				params.addRule(RelativeLayout.ALIGN_LEFT,
    						R.id.toggle_StartOnBoot);
    			}
    			toggle_Button.setLayoutParams(params);
    			toggle_Button.setImageResource(R.drawable.progress_thumb_selector);
    			toggle.setGravity(Gravity.RIGHT | Gravity.CENTER_VERTICAL);
    			// 播放动画
    			TranslateAnimation animation = new TranslateAnimation(
    					DisplayUtils.dip2px(context, 40), 0, 0, 0);
    			animation.setDuration(200);
    			toggle_Button.startAnimation(animation);
    		} else {
    			// 调整位置
    			if ("自动播放".equals(settingName)) {
    				params.addRule(RelativeLayout.ALIGN_RIGHT, R.id.toggle_AutoPlay);
    			} else if ("开机自启动".equals(settingName)) {
    				params.addRule(RelativeLayout.ALIGN_RIGHT,
    						R.id.toggle_StartOnBoot);
    			}
    			params.addRule(RelativeLayout.ALIGN_LEFT, -1);
    			toggle_Button.setLayoutParams(params);
    			toggle_Button
    					.setImageResource(R.drawable.progress_thumb_off_selector);
    
    			toggle.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
    			// 播放动画
    			TranslateAnimation animation = new TranslateAnimation(
    					DisplayUtils.dip2px(context, -40), 0, 0, 0);
    			animation.setDuration(200);
    			toggle_Button.startAnimation(animation);
    		}
    	}
    
    }
    



  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/riskyer/p/3257970.html
Copyright © 2011-2022 走看看