Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android在EditText、微调器或按钮上绘制(在屏幕上绘制)_Android_Android Layout_View_Android Widget - Fatal编程技术网

Android在EditText、微调器或按钮上绘制(在屏幕上绘制)

Android在EditText、微调器或按钮上绘制(在屏幕上绘制),android,android-layout,view,android-widget,Android,Android Layout,View,Android Widget,我想要实现的是: 正如你所看到的,文本中有两个小小的黄色三角形(警告标志)。我读到,通过使用相对布局和简单地使图像与文本重叠,可以实现这一点。但是,这不是一个选项,因为我正在编写一个库项目,并且不能将用户限制为一种特定的布局类型(例如RelativeLayout)。或者我读到,它可以在视图的onDraw方法中完成。但是,我将无法访问onDraw方法(或者更确切地说是现在重写它的方式)。我唯一可以访问的是视图itslef(如微调器、编辑文本)或它们的换行视图(如LinearLayout等)。我不

我想要实现的是:

正如你所看到的,文本中有两个小小的黄色三角形(警告标志)。我读到,通过使用相对布局和简单地使图像与文本重叠,可以实现这一点。但是,这不是一个选项,因为我正在编写一个库项目,并且不能将用户限制为一种特定的布局类型(例如RelativeLayout)。或者我读到,它可以在视图的onDraw方法中完成。但是,我将无法访问onDraw方法(或者更确切地说是现在重写它的方式)。我唯一可以访问的是视图itslef(如微调器、编辑文本)或它们的换行视图(如LinearLayout等)。我不仅需要在EditText上设置这个小图标,还需要在诸如微调器、按钮、EditText等视图上设置这个小图标

一个想法是简单地获得我想要在其上绘制警告标志的视图的x/y坐标,但尽管我能够获得坐标,但我对如何在获得的视图上实际绘制感到非常困惑

还有一点需要注意:我正在使用代码从非android布局xml文件生成布局。到目前为止,这一点很重要,恐怕基于android布局xml的解决方案不是一个选项。此外,我必须能够动态添加/删除这些图像覆盖

如果还有其他问题,请告诉我

提前非常感谢,并致以最良好的问候, Ready4Android

编辑

我有一个想法,但我不知道如何实现它:我可以确定我的小部件(如微调器、编辑文本、按钮…)的屏幕坐标,然后我可以在画布上画一个小警告符号,甚至不用触摸小部件。那么,如果我只想在屏幕上画画,这会更容易解决吗?这应该是可能的,不是吗

编辑2(20.09)

我听从了superM的建议,但由于图标被拉伸,我尝试在项目内部使用位图。问题是:它将图标放置在正确的位置(左边缘),但按钮的外观消失了-我猜是因为它被位图替换了

以下是原始按钮:

这里是Xml(不可见的形状与superM的帖子中的形状相同):

编辑3-修改的解决方案

此编辑基于公认的答案-我决定选择嵌入在项目中的位图,因为我在拉伸图像时遇到问题-以下是图层列表:

<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
    
编辑文本: 你的问题不是100%清楚

如果您希望图像位于文本后面,那么实现这一点的最佳方法是将该图像设置为左侧的背景,并将其设置为扩展空白的9patch图像

如果您希望在输入文本时图像向右移动,那么有几种方法可以实现,一种简单的方法是使用文本输入的侦听器,并始终确保文本末尾有一个文本。我还没有测试过这种方法,但我想它可以正常工作。

按钮: 只需设置文本即可

  • 使用代码:

    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
    
编辑文本: 你的问题不是100%清楚

如果您希望图像位于文本后面,那么实现这一点的最佳方法是将该图像设置为左侧的背景,并将其设置为扩展空白的9patch图像


如果您希望在输入文本时图像向右移动,那么有几种方法可以实现,一种简单的方法是使用文本输入的侦听器,并始终确保文本末尾有一个文本。我还没有测试过这种方法,但我想它工作得很好。

如果您真的需要能够在任何东西上放置任意视图,您可以查看并使用它来获取要覆盖的视图的坐标。你可以看看android的标准用法,在

中的文本视图上放置一个浮动的小错误标记。如果你真的需要能够在任何东西上放置任意视图,你可以看看并使用它来获取你所创建的视图的坐标
android:text="@string/mystring"
//mystring must be a string in strings.xml
//with a value of <img src="image_location"/>Login