Android在EditText、微调器或按钮上绘制(在屏幕上绘制)
我想要实现的是: 正如你所看到的,文本中有两个小小的黄色三角形(警告标志)。我读到,通过使用相对布局和简单地使图像与文本重叠,可以实现这一点。但是,这不是一个选项,因为我正在编写一个库项目,并且不能将用户限制为一种特定的布局类型(例如RelativeLayout)。或者我读到,它可以在视图的onDraw方法中完成。但是,我将无法访问onDraw方法(或者更确切地说是现在重写它的方式)。我唯一可以访问的是视图itslef(如微调器、编辑文本)或它们的换行视图(如LinearLayout等)。我不仅需要在EditText上设置这个小图标,还需要在诸如微调器、按钮、EditText等视图上设置这个小图标 一个想法是简单地获得我想要在其上绘制警告标志的视图的x/y坐标,但尽管我能够获得坐标,但我对如何在获得的视图上实际绘制感到非常困惑 还有一点需要注意:我正在使用代码从非android布局xml文件生成布局。到目前为止,这一点很重要,恐怕基于android布局xml的解决方案不是一个选项。此外,我必须能够动态添加/删除这些图像覆盖 如果还有其他问题,请告诉我 提前非常感谢,并致以最良好的问候, Ready4Android 编辑 我有一个想法,但我不知道如何实现它:我可以确定我的小部件(如微调器、编辑文本、按钮…)的屏幕坐标,然后我可以在画布上画一个小警告符号,甚至不用触摸小部件。那么,如果我只想在屏幕上画画,这会更容易解决吗?这应该是可能的,不是吗 编辑2(20.09) 我听从了superM的建议,但由于图标被拉伸,我尝试在项目内部使用位图。问题是:它将图标放置在正确的位置(左边缘),但按钮的外观消失了-我猜是因为它被位图替换了 以下是原始按钮: 这里是Xml(不可见的形状与superM的帖子中的形状相同): 编辑3-修改的解决方案 此编辑基于公认的答案-我决定选择嵌入在项目中的位图,因为我在拉伸图像时遇到问题-以下是图层列表:Android在EditText、微调器或按钮上绘制(在屏幕上绘制),android,android-layout,view,android-widget,Android,Android Layout,View,Android Widget,我想要实现的是: 正如你所看到的,文本中有两个小小的黄色三角形(警告标志)。我读到,通过使用相对布局和简单地使图像与文本重叠,可以实现这一点。但是,这不是一个选项,因为我正在编写一个库项目,并且不能将用户限制为一种特定的布局类型(例如RelativeLayout)。或者我读到,它可以在视图的onDraw方法中完成。但是,我将无法访问onDraw方法(或者更确切地说是现在重写它的方式)。我唯一可以访问的是视图itslef(如微调器、编辑文本)或它们的换行视图(如LinearLayout等)。我不
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:drawable/btn_default"
android:top="5dip" android:right="5dip" android:bottom="5dip"
android:left="5dip" />
<item>
<bitmap android:src="@drawable/sign_warning" android:gravity="left" />
</item>
</layer-list>
可按如下方式在按钮上设置:
setBackgroundDrawable(button.getResources().getDrawable(R.drawable.layer_list))
并产生以下结果:
就是这样,伙计们:)
感谢所有的建议和干杯
Ready4Android在您提到的情况下,我认为您想要的可以通过设置轻松完成。在您提到的情况下,我认为您想要的可以通过设置轻松完成。对于editText,它是editText。setCompoundDrawables(左、上、右、下)其中左、上、右和下为可绘制或空。对于按钮,可以使用图层列表和形状将图像设置为背景,其中第一层是透明的,应该“包裹”按钮,第二层是图像。这也可以通过其他视图实现 下面是具有透明背景的图层列表示例:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@android:drawable/btn_default" <!--any default background from android:drawable-->
android:top="5dip"
android:right="5dip"
android:bottom="5dip"
android:left="5dip" />
<item
android:drawable="@drawable/my_drawable"
android:top="0dip"
android:right="0dip"
android:bottom="0dip"
android:left="0dip" />
</layer-list>
对于editText,它是editText.setCompoundDrawables(左、上、右、下),其中左、上、右和下为drawables或null。对于按钮,可以使用图层列表和形状将图像设置为背景,其中第一层是透明的,应该“包裹”按钮,第二层是图像。这也可以通过其他视图实现 下面是具有透明背景的图层列表示例:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@android:drawable/btn_default" <!--any default background from android:drawable-->
android:top="5dip"
android:right="5dip"
android:bottom="5dip"
android:left="5dip" />
<item
android:drawable="@drawable/my_drawable"
android:top="0dip"
android:right="0dip"
android:bottom="0dip"
android:left="0dip" />
</layer-list>
按钮:
只需设置文本即可
- 使用代码:
button.setText("<img src=\"image_location\"/>Login");
button.setText(“登录”);
- 使用xml:
android:text="@string/mystring" //mystring must be a string in strings.xml //with a value of <img src="image_location"/>Login
android:text=“@string/mystring” //mystring必须是strings.xml中的字符串 //值为Login
- 使用代码:
button.setText("<img src=\"image_location\"/>Login");
button.setText(“登录”);
- 使用xml:
android:text="@string/mystring" //mystring must be a string in strings.xml //with a value of <img src="image_location"/>Login
android:text=“@string/mystring” //mystring必须是strings.xml中的字符串 //值为Login
如果您希望在输入文本时图像向右移动,那么有几种方法可以实现,一种简单的方法是使用文本输入的侦听器,并始终确保文本末尾有一个文本。我还没有测试过这种方法,但我想它工作得很好。如果您真的需要能够在任何东西上放置任意视图,您可以查看并使用它来获取要覆盖的视图的坐标。你可以看看android的标准用法,在中的文本视图上放置一个浮动的小错误标记。如果你真的需要能够在任何东西上放置任意视图,你可以看看并使用它来获取你所创建的视图的坐标
android:text="@string/mystring"
//mystring must be a string in strings.xml
//with a value of <img src="image_location"/>Login