Java 如何创建左侧为“货币”,右侧为“值”的编辑文本

Java 如何创建左侧为“货币”,右侧为“值”的编辑文本,java,android,Java,Android,如何创建左侧为“货币”,右侧为“值”的编辑文本 这就是图像 货币也可以是编辑文本的一部分?或者货币是不同的编辑文本 我希望它只能是一个编辑文本。为什么不创建一个水平方向的线性布局呢 并将文本视图左对齐,编辑文本右对齐?为什么不创建水平方向的线性布局 并将文本视图左对齐,编辑文本右对齐?使用EditText并设置此属性android:drawableLeft=“@mipmap/ic_launcher” 代码 <EditText android:layout_width

如何创建左侧为“货币”,右侧为“值”的编辑文本

这就是图像

货币也可以是编辑文本的一部分?或者货币是不同的编辑文本


我希望它只能是一个编辑文本。

为什么不创建一个水平方向的线性布局呢
并将文本视图左对齐,编辑文本右对齐?

为什么不创建水平方向的线性布局
并将文本视图左对齐,编辑文本右对齐?

使用EditText并设置此属性
android:drawableLeft=“@mipmap/ic_launcher”

代码

   <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@mipmap/ic_launcher"
        android:hint="Add money"
        android:gravity="center"
        android:padding="3dp"/>

使用EditText并设置此属性
android:drawableLeft=“@mipmap/ic_launcher”

代码

   <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@mipmap/ic_launcher"
        android:hint="Add money"
        android:gravity="center"
        android:padding="3dp"/>
使用
SpannableString
可以实现这一点

activity\u main.xml
文件中

下面是
UsdSpannableSuperScript.java

公共类UsdSpannableSuperScript扩展了SuperscriptSpan{
//将上标除以这个数字
受保护的int fontScale=2;
//移位值,从0到1.0
受保护的浮点移位百分比=0;
//不会移动
UsdSpannableSuperScript(){
}
//设置移位百分比
UsdSpannableSuperScript(浮动移位百分比){
如果(移位百分比>0.0&&移位百分比<1.0)
this.shiftPercentage=shiftPercentage;
}
@凌驾
public void updateDrawState(TextPaint){
//原始上升
浮动上升=tp.上升();
//缩小字体比例
tp.setTextSize(tp.getTextSize()/fontScale);
//获得新的字体提升
float newAscent=tp.getFontMetrics().ascent;
//将基线移动到旧字体的顶部,然后向下移动新字体的大小
//使用移位百分比调整错误
tp.baselineShift+=(上升-上升*shiftPercentage)
-(新上升-新上升*移动百分比);
}
@凌驾
公共无效更新度量重述(TextPaint tp){
更新状态(tp);
}
}
这里是屏幕

使用
SpannableString
可以实现这一点

activity\u main.xml
文件中

下面是
UsdSpannableSuperScript.java

公共类UsdSpannableSuperScript扩展了SuperscriptSpan{
//将上标除以这个数字
受保护的int fontScale=2;
//移位值,从0到1.0
受保护的浮点移位百分比=0;
//不会移动
UsdSpannableSuperScript(){
}
//设置移位百分比
UsdSpannableSuperScript(浮动移位百分比){
如果(移位百分比>0.0&&移位百分比<1.0)
this.shiftPercentage=shiftPercentage;
}
@凌驾
public void updateDrawState(TextPaint){
//原始上升
浮动上升=tp.上升();
//缩小字体比例
tp.setTextSize(tp.getTextSize()/fontScale);
//获得新的字体提升
float newAscent=tp.getFontMetrics().ascent;
//将基线移动到旧字体的顶部,然后向下移动新字体的大小
//使用移位百分比调整错误
tp.baselineShift+=(上升-上升*shiftPercentage)
-(新上升-新上升*移动百分比);
}
@凌驾
公共无效更新度量重述(TextPaint tp){
更新状态(tp);
}
}
这里是屏幕

  • 仅使用单个EditText也可以工作。为此,您必须设置prefix并从edittext中获取与prefixCount相关的值

  • 你可以这样试试。这是一个更好的方法

           <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/grey"
                android:orientation="horizontal"
                android:padding="10dp">
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="USD" />
    
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:background="@null"
                    android:singleLine="true" />
    
            </LinearLayout>
    
    
    
  • 输出:与上面提到的图像相同

  • 使用单一文本是另一种方法。您可以拥有货币“USD”的图像,并将drawableLeft设置为edittext

              <EditText
                    android:id="@+id/edittext"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_margin="10dp"
                    android:drawableLeft="@drawable/dollar_sign"
                    android:drawablePadding="5dp"
                    android:inputType="number"
                    android:padding="10dp"
                    android:singleLine="true" />
    
    
    
  • 仅使用单个EditText也可以工作。为此,您必须设置prefix并从edittext中获取与prefixCount相关的值

  • 你可以这样试试。这是一个更好的方法

           <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/grey"
                android:orientation="horizontal"
                android:padding="10dp">
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="USD" />
    
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:background="@null"
                    android:singleLine="true" />
    
            </LinearLayout>
    
    
    
  • 输出:与上面提到的图像相同

  • 使用单一文本是另一种方法。您可以拥有货币“USD”的图像,并将drawableLeft设置为edittext

              <EditText
                    android:id="@+id/edittext"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_margin="10dp"
                    android:drawableLeft="@drawable/dollar_sign"
                    android:drawablePadding="5dp"
                    android:inputType="number"
                    android:padding="10dp"
                    android:singleLine="true" />
    
    
    
  • 若要使用,请扩展TextView并手动添加此逻辑,或者通过代码进行添加


    要使用,请扩展TextView并手动添加此逻辑,或通过代码执行此操作

    尝试拍摄USD的可绘制图像,并在可绘制左侧设置为edittext,并设置edittext重心。试试这个你可以试试TextInputLayout@Er.Arjunsaini如何从文本或字符串中获得可绘制图像?@Er.Arjunsaini实际上这是一个非常好的主意。现在我正在搜索如何使用Spanable从文本中获取可绘制图像,我想尝试获取美元的可绘制图像,并在drawableLeft中设置为edittext并设置edittext重心。试试这个你可以试试TextInputLayout@Er.Arjunsaini如何从文本或字符串中获得可绘制图像?@Er.Arjunsaini实际上这是一个非常好的主意。现在我正在搜索如何使用Spanable从文本中获取可绘制图像,我想我刚才已经这样做了,但问题是如果有可能将其合并为一个,我会这样做。我刚才已经这样做了,但问题是,如果可以合并为一个,那么我会这样做。实际上,这是唯一一个适合我的需要,我想我可以分离图像文件,并将其添加到左侧的可绘制文件,但似乎它不适合我。谢谢你的代码,我真的很感激。顺便说一句,如果我得到这个,美元符号会出现吗?事实上,这是唯一一个适合我需要的,我想我会的
              <EditText
                    android:id="@+id/edittext"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_margin="10dp"
                    android:drawableLeft="@drawable/dollar_sign"
                    android:drawablePadding="5dp"
                    android:inputType="number"
                    android:padding="10dp"
                    android:singleLine="true" />
    
    Currency currency = new Currency(Locale.US)
    final String usd = currency.getCurrencyCode(); //returns USD