我想创建一组单选按钮来选择颜色.像这样的东西:
我怎样才能实现这样的目标?我没有在原版RadioButton上找到任何颜色属性.我是否必须创建自定义控件?如果是的话,有人可以在基本步骤上暗示我,这样我可以尝试一些新的研究吗?我是Android的新手,并试图通过做...
你可以尝试自定义单选按钮,或者你可以简单地使用或膨胀视图来实现这种颜色选择器.
使用xml:您需要在drawable文件夹中创建两个可绘制的资源文件.首先是这样的,
如果您未收到视图上的任何点击(可点击),则此选项适用.当我们检测到点击时,第二个文件适用.
xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
现在,在活动中,需要将可绘制的背景设置为视图(无论是图像按钮还是图像视图).这是这样的(只是一个例子):
public class MainActivity extends AppCompatActivity { private ImageButton img; private boolean isSelected = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageButton) findViewById(R.id.img); img.setClickable(true); img.setBackground(getDrawable(R.drawable.unselected_circle)); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { img.startAnimation(AnimationUtils.loadAnimation(getBaseContext(), android.R.anim.fade_in)); if (isSelected) { isSelected = false; img.setBackground(getDrawable(R.drawable.unselected_circle)); } else { isSelected = true; img.setBackground(getDrawable(R.drawable.selected_circle)); } } }); }
}
而activity_main布局看起来像这样:
但是,使用这种方法,最终会为不同的颜色创建多个drawable.为了避免这种情况,我们可以通过编程方式创建drawable,编写一次代码并使用setColor(int color)方法将其用于不同的颜色:
public class MainActivity extends AppCompatActivity { private ImageButton img; private boolean isSelected = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final GradientDrawable unselected = new GradientDrawable(); unselected.setShape(GradientDrawable.OVAL); unselected.setColor(Color.parseColor("#e91e63")); unselected.setSize(144, 144); final GradientDrawable selected = new GradientDrawable(); selected.setShape(GradientDrawable.OVAL); selected.setColor(Color.parseColor("#E91E63")); selected.setSize(159, 159); selected.setStroke(15, Color.parseColor("#D2D1D2")); img = (ImageButton) findViewById(R.id.img); img.setBackground(unselected); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { img.startAnimation(AnimationUtils.loadAnimation(getBaseContext(), android.R.anim.fade_in)); if (isSelected) { isSelected = false; img.setBackground(unselected); } else { isSelected = true; img.setBackground(selected); } } }); }
}
结果看起来像这样
注意:此示例仅说明实现一个选择器的方法,如问题中提到的那个.要创建多个选择器,需要使用LayoutInflater类来扩展视图(图像按钮).