- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
public class CheckedTextView extends TextView implements Checkable {
private boolean mChecked;
private int mCheckMarkResource;
private Drawable mCheckMarkDrawable;
private int mBasePaddingRight;
private int mCheckMarkWidth;
private static final int[] CHECKED_STATE_SET = {
R.attr.state_checked
};
public CheckedTextView(Context context) {
this(context, null);
}
public CheckedTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CheckedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.CheckedTextView, defStyle, 0);
Drawable d = a.getDrawable(R.styleable.CheckedTextView_checkMark);
if (d != null) {
setCheckMarkDrawable(d);
}
boolean checked = a.getBoolean(R.styleable.CheckedTextView_checked, false);
setChecked(checked);
a.recycle();
}
public void toggle() {
setChecked(!mChecked);
}
@ViewDebug.ExportedProperty
public boolean isChecked() {
return mChecked;
}
/**
* <p>Changes the checked state of this text view.</p>
*
* @param checked true to check the text, false to uncheck it
*/
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
}
}
/**
* Set the checkmark to a given Drawable, identified by its resourece id. This will be drawn
* when {@link #isChecked()} is true.
*
* @param resid The Drawable to use for the checkmark.
*/
public void setCheckMarkDrawable(int resid) {
if (resid != 0 && resid == mCheckMarkResource) {
return;
}
mCheckMarkResource = resid;
Drawable d = null;
if (mCheckMarkResource != 0) {
d = getResources().getDrawable(mCheckMarkResource);
}
setCheckMarkDrawable(d);
}
/**
* Set the checkmark to a given Drawable. This will be drawn when {@link #isChecked()} is true.
*
* @param d The Drawable to use for the checkmark.
*/
public void setCheckMarkDrawable(Drawable d) {
if (mCheckMarkDrawable != null) {
mCheckMarkDrawable.setCallback(null);
unscheduleDrawable(mCheckMarkDrawable);
}
if (d != null) {
d.setCallback(this);
d.setVisible(getVisibility() == VISIBLE, false);
d.setState(CHECKED_STATE_SET);
setMinHeight(d.getIntrinsicHeight());
mCheckMarkWidth = d.getIntrinsicWidth();
mPaddingRight = mCheckMarkWidth + mBasePaddingRight;
d.setState(getDrawableState());
} else {
mPaddingRight = mBasePaddingRight;
}
mCheckMarkDrawable = d;
requestLayout();
}
@Override
public void setPadding(int left, int top, int right, int bottom) {
super.setPadding(left, top, right, bottom);
mBasePaddingRight = mPaddingRight;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
final Drawable checkMarkDrawable = mCheckMarkDrawable;
if (checkMarkDrawable != null) {
final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
final int height = checkMarkDrawable.getIntrinsicHeight();
int y = 0;
switch (verticalGravity) {
case Gravity.BOTTOM:
y = getHeight() - height;
break;
case Gravity.CENTER_VERTICAL:
y = (getHeight() - height) / 2;
break;
}
int right = getWidth();
checkMarkDrawable.setBounds(
right - mCheckMarkWidth - mBasePaddingRight,
y,
right - mBasePaddingRight,
y + height);
checkMarkDrawable.draw(canvas);
}
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
if (mCheckMarkDrawable != null) {
int[] myDrawableState = getDrawableState();
// Set the state of the Drawable
mCheckMarkDrawable.setState(myDrawableState);
invalidate();
}
}
@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
boolean populated = super.dispatchPopulateAccessibilityEvent(event);
if (!populated) {
event.setChecked(mChecked);
}
return populated;
}
}
如上所示,checkMarkDrawable是通过Gravity在Canvas中的位置来确定位置的。我的问题是:如何更改checkMarkDrawable的位置,例如将checkMarkDrawable设置在左侧的TextView中。
最佳答案
如果您希望复选框位于左侧,只需使用 CheckBox
.也许这当然不是问题,但是 CheckBox
可以包含文本。您可以通过添加 XML 属性来定义该文本 android:text ,或调用 setText()方法。实际上 CheckBox
继承自 Button
,而 Button
继承自 TextView
,这就是为什么它具有所有与文本相关的属性。
关于android - 如何自定义设置可绘制位置CheckedTextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444466/
我的 Android 应用程序有问题。我正在尝试创建一个 ListView ,每行包含一个 TextView 和一个选中的 TextView 。我已经完成了布局和适配器,它正确显示了所有项目,但我遇到
我有一个附加到数组适配器的简单 ListView 。我的列表是多选复选框的列表。 开始时,我只是将 android CheckedTextView 用于我的列表 TextView : public s
目前我正在为我的 ListView 使用 CheckedTextView。我只想在单击 CheckBox 而不是相应的文本时激活复选框。如何在CheckedTextView中实现这样的功能? 编辑:
我有以下 xml 代码: 似乎 textview 反射(reflect)了 10 dp 的填充,但右侧的复选框却没有。 TextView 和复选框彼此不对齐。任何人都知道为什么复选框不符合 10 dp
我想在我的几个 checkedtextview 中自定义复选标记。我想使用一个“简单”的解决方案,所以我这样做了: if(serviceChecked.isChecked()){ se
如何在 android 中动态创建 CheckedTextView [而不创建新的实现]? 似乎 CheckedTextView 是抽象的 ...(这根本没有任何意义)因为我不断收到编译时错误:“无法
CheckedTextView 中的文本无法居中,当我制作 android:gravity="center" 最佳答案 试试 android:layout_centerHorizontal="t
我有一个用 CheckedTextViews 动态填充的 ListView 。 ListView 设置为多选模式。我正在使用 OnItemClickListener 来响应对我的 ListView 的
我想要一个多选(选中) ListView 。当我选择一个项目时,绿色复选标记必须出现。为此,我使用了 CheckedTextViews。ListView 从数据库中获取数据。为此,我使用了 Simpl
我实现的布局如下图所示: 我使用的代码是: 这就是我想要的,如下图: 分享一些自定义它的想法,但不使用自定义线性或任何其他布局。我想要一个自定义 View 或 checkedTextVie
给定 CheckedTextView 的 checkMark 的这个 XML 属性: android:checkMark="?android:attr/listChoiceIndicatorMulti
最初我想要一个复选标记,文本放置在复选标记的左侧。在这个网站上搜索后,我发现最好的解决方法是 android:CheckedTextView?但是,我发现用户无法手动更改复选标记。是设计的吗? 最佳
这是我设置已检查 TextView 的方法。怎么没有出现复选框? 我也添加了这个,但没有效果: listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
我有一个带有复选框的 ListView,单击时需要进行切换。由于某种原因,我让它在较旧的 Android 操作系统上运行,但现在在最新版本中无法运行。 这是我的 XML 文件: 以及相关源代码:
我在 AlertDialog 上显示了一个自定义列表。我希望当我单击一个项目时,CheckedTextView 被设置为选中。我试了几个小时,但没有 setChecked()似乎不起作用... 谁能帮
我的布局有问题。 CheckedTextView 中的复选框始终位于 TextView 的右侧。我怎样才能将它对齐到列表的右边缘? 感谢您以后的回答。 这是我的布局: 最佳答案 将复选框的
好的,所以这个网站上已经解决了很多问题,但是我不相信我的代码使用的确切问题。我正在用完全工作的 CheckedTextViews 填充 listView。但是,当我单击某个项目时,它会被选中,但当我上
我正在尝试实现一个非常简单的“待办事项”列表。我选择使用 CheckedTextView 的 ListView(id 为 checked_text),ListView 当然使用 CHOICE_MODE
Android version: 3.1 API version: Android 2.2 Device: Motorola MX604 我动态创建了 CheckedTextView 项目的多选 Li
我有一个 ListView,其中每一行都包含一个 CheckedTextView。我正在使用自定义 checkMark 属性,它使用可绘制对象: 可绘制的 checkbox_selector 按预期
我是一名优秀的程序员,十分优秀!