我有一个带有两个带斜体样式字体的editTexts的简单表单,但是当放置在第一个位置时,一些字母(p和j)在左边“切割”。我试图用drawablePadding修复它,但它不起作用。在我的情况下,在第一个字母之前插入空格不是解决方案,至少不是最好的,因为第二个表单字段是密码1,因此由于空格字符,将自动向用户显示一个点。 EditText具有以下代码:
<EditText
android:id="@+id/edit_txt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/rectangle_white"
android:drawableLeft="@drawable/ic_mail"
android:drawablePadding="10dp"
android:ems="10"
android:hint="@string/login_email_placeholder"
android:imeOptions="actionNext"
android:inputType="textEmailAddress"
android:padding="10dp"
android:textColor="@color/black"
android:textCursorDrawable="@null"
android:textColorHint="@color/color_form_login_text"
android:textSize="17sp" >
活动:
Typeface edit_text_font = Typeface.createFromAsset(getActivity().getAssets(),
"fonts/helvetica-bold-italic.ttf");
//Set Fonts
mEditTxtLogin.setTypeface(edit_text_font);
错误图片:
解决方案是什么?
答案 0 :(得分:2)
这是解决方案。我已经使用自定义字体创建了自定义EditText。
package com.example.customcontrols;
import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;
public class MyEditTextItalic extends EditText {
/*
* Caches typefaces based on their file path and name, so that they don't
* have to be created every time when they are referenced.
*/
private static Typeface mTypeface;
public MyEditTextItalic(Context context) {
super(context);
setTypeface(context);
}
public MyEditTextItalic(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setTypeface(context);
}
public MyEditTextItalic(Context context, AttributeSet attrs) {
super(context, attrs);
setTypeface(context);
}
// intercept Typeface change and set it with our custom font
public void setTypeface(Context context) {
if (mTypeface == null) {
mTypeface = Typeface.createFromAsset(context.getAssets(),
"fonts/HelveticaNeue-Bold.otf");
}
super.setTypeface(mTypeface,Typeface.ITALIC);
}
}
非常重要的是不要创建字体斜体,因为没有正确显示,使用斜体时设置字体使用super.setTypeface(mTypeface, Typeface.ITALIC );
in .xml
<com.example.customcontrols.MyEditTextItalic
android:id="@+id/edit_txt_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:background="@drawable/rectangle_white"
android:drawableLeft="@drawable/ic_key"
android:drawablePadding="10dp"
android:ems="10"
android:hint="@string/login_password_placeholder"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:padding="10dp"
android:textColor="@color/black"
android:textCursorDrawable="@null"
android:textStyle="bold|italic"
android:textColorHint="@color/color_form_login_text"
android:textSize="17sp" />
答案 1 :(得分:0)
尝试添加填充。试试这个:
<EditText
android:id="@+id/edit_txt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/rectangle_white"
android:drawableLeft="@drawable/ic_mail"
android:drawablePadding="10dp"
android:ems="10"
android:hint="@string/login_email_placeholder"
android:imeOptions="actionNext"
android:inputType="textEmailAddress"
android:padding="10dp"
android:paddingLeft="45dp"
android:textColor="@color/black"
android:textCursorDrawable="@null"
android:textColorHint="@color/color_form_login_text"
android:textSize="17sp" >
答案 2 :(得分:0)
尝试提供android:paddingLeft
以上10dp
以上
或者将android:drawablePadding
减少到4或5dp
答案 3 :(得分:0)
这对我有用,将自定义宽度设置为xml布局:
android:width="130dp" //Define a value larger than your text.
答案 4 :(得分:0)
您可以通过给它一个文本阴影来强制一个 TextView
在其边界之外绘制。如果您将阴影颜色设置为透明,那么您就有了解决方案!将这些添加到您的 TextView
:
android:shadowColor="#00FFFFFF"
android:shadowDx="48"
android:shadowDy="0"
android:shadowRadius="1"
在我的测试中,我发现 #00000000 不起作用,48 的大小足以显示所有剪切的文本,并且需要使用 shadowDy 和 shadowRadius。
答案 5 :(得分:-1)
您可以使用 left 中的padding
。
在layout.xml上请添加以下行:
android:paddingLeft="20dp" //you can set it what you need