我想知道,如何正确自定义SwitchPreferenceCompat
,以使其行为与Wi-Fi设置首选项相同。
实现目标的要求是
到目前为止,我只能通过使用以下自定义代码来实现要求1.
import android.content.Context;
import android.support.v7.preference.PreferenceViewHolder;
import android.support.v7.preference.SwitchPreferenceCompat;
import android.support.v7.widget.SwitchCompat;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
public class CustomSwitchPreferenceCompat extends SwitchPreferenceCompat {
public CustomSwitchPreferenceCompat(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public CustomSwitchPreferenceCompat(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomSwitchPreferenceCompat(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomSwitchPreferenceCompat(Context context) {
super(context);
}
/**
* Recursively go through view tree until we find an android.widget.Switch
* @param view Root view to start searching
* @return A Switch class or null
*/
private SwitchCompat findSwitchWidget(View view){
if (view instanceof SwitchCompat){
return (SwitchCompat)view;
}
if (view instanceof ViewGroup){
ViewGroup viewGroup = (ViewGroup)view;
for (int i = 0; i < viewGroup.getChildCount();i++){
View child = viewGroup.getChildAt(i);
if (child instanceof ViewGroup){
SwitchCompat result = findSwitchWidget(child);
if (result!=null) return result;
}
if (child instanceof SwitchCompat){
return (SwitchCompat)child;
}
}
}
return null;
}
//Get a handle on the 2 parts of the switch preference and assign handlers to them
@Override
public void onBindViewHolder (PreferenceViewHolder holder){
super.onBindViewHolder(holder);
final SwitchCompat switchView = findSwitchWidget(holder.itemView);
if (switchView!=null){
switchView.setClickable(true);
switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
android.util.Log.i("CHEOK", "Switch area : Being switch " + isChecked);
}
});
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
android.util.Log.i("CHEOK", "Non-switch area : Being clicked");
}
});
}
}
但是,我无法弄清楚,我怎样才能拥有正确的选择器行为,以及介于两者之间的分隔符UI?
我可以使用任何建议或现成的图书馆吗?
答案 0 :(得分:0)
添加一个ViewGroup并将其id
定义为@android:id/widget_frame
。偏好视图将搜索此ID,并将其内容插入其中。
在您的布局内添加代码段:
<LinearLayout android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical" />