私は後で答えを見つけました。私はまだ質問1についてはわかりませんが、あなたはそれをプログラム的に拡張することができます。
public class StyleableToggleButton extends ButtonRectangle implements StyleableView, Checkable {
private boolean checked = false;
private int primaryColor = Config.DEFAULT_PRIMARY_COLOR;
private int secondaryColor = Config.DEFAULT_SECONDARY_COLOR;
private float rippleSpeed = 18f;
private TextView textView;
private ImageView imageView;
private LinearLayout linearLayout;
private int minHeight;
private float fontSize = 16f;
public StyleableToggleButton(Context context, AttributeSet attrs) {
super(context, attrs);
minHeight = (getResources().getDisplayMetrics().heightPixels - AttUtils.dpToPx(getResources().getDimension(R.dimen.height_att_activity_bar),getResources()))/4;
setupButton();
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
toggle();
applyStyle();
}
});
setRippleSpeed(rippleSpeed);
}
//This is where we add textView and imageView to existing layout. We just kept previous empty.
private void setupButton() {
setMinimumHeight(minHeight);
linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams layoutParams;
layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
linearLayout.setLayoutParams(layoutParams);
layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
textView = new TextView(getContext());
textView.setLayoutParams(layoutParams);
textView.setTypeface(null, Typeface.BOLD);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
textView.setTextAlignment(TEXT_ALIGNMENT_CENTER);
}
textView.setTextSize(fontSize);
layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
imageView = new ImageView(getContext());
imageView.setLayoutParams(layoutParams);
linearLayout.addView(imageView);
linearLayout.addView(textView);
addView(linearLayout);
}
@Override
public void setChecked(boolean b) {
checked = b;
applyStyle();
}
@Override
public boolean isChecked() {
return checked;
}
@Override
public void toggle() {
checked = !checked;
applyStyle();
}
@Override
public void applyStyle() {
Drawable dr = imageView.getDrawable();
if (checked){
this.setBackgroundColor(primaryColor);
textView.setTextColor(secondaryColor);
if (dr != null) {
dr.setColorFilter(secondaryColor, PorterDuff.Mode.MULTIPLY);
imageView.setImageDrawable(dr);
}
}else {
this.setBackgroundColor(secondaryColor);
textView.setTextColor(primaryColor);
if (dr != null) {
dr.setColorFilter(primaryColor, PorterDuff.Mode.MULTIPLY);
imageView.setImageDrawable(dr);
}
}
}
@Override
protected int makePressColor(){
return !checked ? primaryColor : secondaryColor;
}
@Override
public void setText(String text){
textView.setText(text);
}
public void setImage(Drawable drawable){
imageView.setImageDrawable(drawable);
}
public void setLayoutMargin(int marginWidth, int marginHeight){
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(marginWidth, marginHeight, marginWidth, marginHeight);
linearLayout.setLayoutParams(layoutParams);
}
public void setTextViewMargin(int marginWidth, int marginHeight){
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(marginWidth, marginHeight, marginWidth, marginHeight);
textView.setLayoutParams(layoutParams);
}
public void setImageViewMargin(int marginWidth, int marginHeight){
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(marginWidth, marginHeight, marginWidth, marginHeight);
imageView.setLayoutParams(layoutParams);
}
}
:2質問に対する
回答はaddView(ビューV)
はので、私のコードは次のようになりますされます