Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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 为特定字体从前面剪掉的文本_Android_Fonts_Textview - Fatal编程技术网

Android 为特定字体从前面剪掉的文本

Android 为特定字体从前面剪掉的文本,android,fonts,textview,Android,Fonts,Textview,新行中每个单词的第一个字母都被切掉,以使用美国德尼利亚草书字体 看到这张图片了吗?这张有填充物。如果我没有使用任何填充物,它会像图2一样 这是我的密码 <com.font.anything.writinghelper android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="match_parent" android:textColor="#00

新行中每个单词的第一个字母都被切掉,以使用美国德尼利亚草书字体

看到这张图片了吗?这张有填充物。如果我没有使用任何填充物,它会像图2一样

这是我的密码

<com.font.anything.writinghelper
    android:id="@+id/textView" 
   android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textColor="#000000"
    android:padding="20dip"
    android:textSize="60sp"
    android:text="japanese google donkey elephant ostrich"
    />

这里,writing helper是一个扩展textview的类,它只是在文本下面加下划线

     protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    Rect r = mRect;
    int padding =55;
    Paint paint = mPaint;
    int count = getLineCount();
    for (int i = 0; i < count; i++) {
    int baseline = getLineBounds(i, r);
    canvas.drawLine(r.left - padding, baseline, r.right + padding,
            baseline, paint);
    }
    super.onDraw(canvas);
}
受保护的void onDraw(画布){
//TODO自动生成的方法存根
Rect r=mRect;
int=55;
油漆油漆=mPaint;
int count=getLineCount();
for(int i=0;i
有人能帮忙吗

编辑

请求的屏幕截图


有没有办法在文本视图的左侧留出一些额外的空间

最后我做了一个解决方案。这是一个字体问题,我不确定是否可以通过任何其他方式解决。因此,我所做的是,首先获取TextView布局,获取每行的结尾和开头,然后获取每行中的字符串。现在在每行前面添加空格。这是完整的代码。可能会帮助其他人

    ArrayList<String> lines = new ArrayList<String>();
    ArrayList<String> newLines = new ArrayList<String>();
    String line="";
    String text = getText().toString();
    Layout layout = getLayout();
    int start=0;
    int end;

    for (int i=0; i<count; i++) {
        end = layout.getLineEnd(i);

        lines.add(text.substring(start,end));
        line = lines.get(i);
        start = end;
        String nwText = "";
        nwText = " "+ line+" ";
        newLines.add(nwText);
    }
    Paint mPaint = getPaint();
    int i = 0;
   // String[] textLines = Results.split("\\n+");
    //float textsize = getTextSize();

    for (String textLine : newLines)
    {
       // mPaint.setTextSize(textsize);
        int baseline = getLineBounds(i, r);
        canvas.drawText(textLine, 0, baseline, mPaint);
       i++;
    }
ArrayList line=new ArrayList();
ArrayList换行符=新的ArrayList();
字符串行=”;
字符串text=getText().toString();
Layout=getLayout();
int start=0;
内端;

对于(int i=0;i我得出了一个类似的解决方案。这会在行首和行尾递归地添加空格,如果在添加空格时单词转到该解决方案下面的行,则会自行修复错误。 (前3个变量具有类范围)


你能给我发送canvas.drawLine的参数吗(r.left-padding,baseline,r.right+padding,baseline,paint);这个….写行辅助对象只用于隐藏文本,我认为这与此无关,因为我在没有辅助对象的情况下尝试了,结果是一样的。不管怎样,这是参数mRect=new Rect();mpain=new Paint();mpain.setStyle(Paint.Style.STROKE);mpain.setStrokeWidth(2);mPaint.setColor(0xFF03B9FF);
    row = 0;
    offset = 0;
    oldPos = -1;
    final String nonBreakingSpace = "\u00A0\u00A0";
    textV.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int pos;
            StringBuilder sb = new StringBuilder(textV.getText());

            pos = textV.getLayout().getLineStart(row);
            if (oldPos!=-1 && pos<oldPos)
            {
                sb.delete(oldPos, oldPos + nonBreakingSpace.length());
            }

            if (offset==0)
            {
                row++;
                offset = -1;
            }
            else
            {
                offset = 0;
            }
            final int lineCount = textV.getLayout().getLineCount();
            pos = textV.getLayout().getLineStart(row);
            oldPos = pos+offset;
            if (row>=lineCount)
            {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                    removeLayoutListenerPre16(textV.getViewTreeObserver(), this);
                } else {
                    removeLayoutListenerPost16(textV.getViewTreeObserver(), this);
                }
                sb.insert(0, nonBreakingSpace);
                sb.insert(sb.length(), nonBreakingSpace);
            }
            else
            {
                sb.insert(pos+offset, nonBreakingSpace);                    
            }
            textV.setText(sb);
        }
    }); 
@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
    observer.removeGlobalOnLayoutListener(listener);
}

@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
    observer.removeOnGlobalLayoutListener(listener);
}