android自定义imageview,右边有textview

Posted

技术标签:

【中文标题】android自定义imageview,右边有textview【英文标题】:android custom imageview with textview to the right 【发布时间】:2012-11-09 17:47:37 【问题描述】:

我目前正在编写自定义 ImageView。我实际上把这个 imageview 变成了一个多状态按钮。

在我的例子中,按钮有三种状态,回答是,回答否和未回答。 我绝对不想使用单选组/按钮。

我已经完成了 imageview 的基本设置。它具有 onclick 功能,可以根据状态正确更改图像。现在只是一个带叉号的复选框、一个空复选框和一个带勾号的复选框。

我想要的是,当状态改变时(点击图像)我想要文本,它应该始终存在,并且永远不会位于图像视图的顶部。也改变它的价值。我希望能够调用类似于 customCompInstance.getText(); 的方法customCompInstance.getText();

我的想法是,自定义 imageview 类应该有一个 TextView 成员,但我不知道如何将它放在左侧,与 imageview 水平对齐。

不能只在 xml 中使用两个不同的元素。

添加一个textview并将其放置在imageview的右侧是正确的解决方案,如果不是,你有什么建议,如果是,请给我一些关于如何实际实现这一点的提示。

我的班级的简化版:

public class AnswerImageView extends ImageView 
    private AnswerState mSelectionState;

    /**
     * @param context
     */
    public AnswerImageView(Context context)
    
        super(context);
        // TODO Auto-generated constructor stub
        setImageResource(R.drawable.answer_none);
        setTag(R.drawable.answer_none);
        mSelectionState = AnswerState.ANSWER_NONE;
    

    /**
     * @param context
     * @param attrs
     */
    public AnswerImageView(Context context, AttributeSet attrs)
    
        super(context, attrs);
        // TODO Auto-generated constructor stub
        setImageResource(R.drawable.answer_none);
        setTag(R.drawable.answer_none);
        mSelectionState = AnswerState.ANSWER_NONE;
    

    /**
     * @param context
     * @param attrs
     * @param defStyle
     */
    public AnswerImageView(Context context, AttributeSet attrs, int defStyle)
    
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        setImageResource(R.drawable.answer_none);
        setTag(R.drawable.answer_none);
        mSelectionState = AnswerState.ANSWER_NONE;
    

    public AnswerState getSelectionState() 
        return mSelectionState;
    

    public void setSelectionState(AnswerState selectionState) 
        this.mSelectionState = selectionState;
    

我有一个对点击做出反应的方法,一切正常。 我纯粹是想在这个组件中添加一个文本视图。本质上将两个组件合二为一。

【问题讨论】:

只使用一个带有图像和文本视图的视图组 【参考方案1】:

您应该从TextView 而不是ImageView 扩展并查看方法TextView.setCompoundDrawableXXX。 Here 是文档的链接。

【讨论】:

感谢您的迅速回复。我想这似乎是合乎逻辑的事情。然而,我遇到的问题是,我附加到 textview 的几乎每个可绘制对象都没有正确水平对齐。并且没有专门针对可绘制对象的底部/顶部的填充。如何克服这个问题? 您可以创建一个自定义视图,该视图将扩展 ViewGroup 并扩展一个 XML 布局文件,您可以根据需要在其中放置 ImageViewTextView。然后,在您看来,找到ImageViewTextView 并与他们一起玩。 我想我到了某个地方。我刚刚在android dev上找到了一篇关于纯粹通过xml创建复合组件的文章。它完成了我想要的,但并不是我想要的。不过感谢您的提示。这将证明非常有帮助。

以上是关于android自定义imageview,右边有textview的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 的自定义视图中显示 ImageView

Android项目实战:CustomShapeImageView 自定义形状的ImageView

Android学习笔记圆角矩形ImageView自定义控件的实现与使用

Android Matrix手势缩放自定义view 不止于Imageview

Android开发之自定义圆角矩形图片ImageView的实现

Android 通过 id 更新自定义 XML imageView