自定义一个带缩略图的的preference
为了方便我们就直接继承自 Preference
package com.example.rindia.testapplication;
import android.content.Context;
import android.content.res.TypedArray;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
/** * Created by Rindia on 2017/12/26. */
public class Testprefence extends Preference{
private String src;
private static final String IMAGE_PICKER_PREFERENCE_IMGSRC = "Image_Picker_Preference_imgsrc";
public Testprefence(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
public Testprefence(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public Testprefence(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private float mDensity;
private void init(){
mDensity = getContext().getResources().getDisplayMetrics().density;
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
ImageView mImageView = new ImageView(getContext());
//这里的widgetFrame是preference自己加载的的一个view里面的子空控件,我们就直接把ImageView添加到这里了
LinearLayout widgetFrame =(LinearLayout) view.findViewById(android.R.id.widget_frame);
widgetFrame.setVisibility(View.VISIBLE);
//设置边距
ViewGroup.LayoutParams layoutParams = widgetFrame.getLayoutParams();
layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
layoutParams.width = (int) (80 * mDensity);
widgetFrame.setLayoutParams(layoutParams);
widgetFrame.setPadding(
widgetFrame.getPaddingLeft(),
widgetFrame.getPaddingTop(),
(int) (mDensity * 4),
widgetFrame.getPaddingBottom()
);
int count = widgetFrame.getChildCount();
if (count > 0){
widgetFrame.removeAllViews();
}
widgetFrame.addView(mImageView);
widgetFrame.setMinimumWidth(0);
int padding = (int) (mDensity * 4);
mImageView.setPadding(padding,padding,padding,padding);
//使用sharedPreference找到图片路径,getSharedPreference这个方法不能在构造方法中使用否则会报错。
mSrc = getSharedPreferences().getString(IMAGE_PICKER_PREFERENCE_IMGSRC + getKey(),"");
//在这里我使用了Glide填充主要是为了方便,当然你也可以使用其他的方式,skipMemoryCache(true).diskCacheStrategy( DiskCacheStrategy.NONE )每次加载图片不要使用缓存
Glide.with(getContext()).load(mSrc).skipMemoryCache(true).diskCacheStrategy( DiskCacheStrategy.NONE ).into(mImageView);
}
public void setmSrc(String src){
this.mSrc = src;
getEditor().putString(IMAGE_PICKER_PREFERENCE_IMGSRC + getKey(),mSrc).commit();
Glide.with(getContext()).load(mSrc).skipMemoryCache(true).diskCacheStrategy( DiskCacheStrategy.NONE ).into(mImageView);
}
public String getmSrc(){
return mSrc;
}
public String getImageKey(){
retrun IMAGE_PICKER_PREFERENCE_IMGSRC + getKey();
}
其实Preference就是对view的一个封装,自定义preference就是自定义view,我们还可以自定义属性,自定义样式。在这个例子里我们也可以直接将选择图片方法直接封装到preference里,做成ImagePickePreference。