在不同颜色中的TextView顶部边框

4

我有一个TextView,想在顶部边框上放置不同的颜色(比如白色)。我尝试了以下方法,但并没有成功(会给所有边距 - 左、右、上、下添加白色边框):

<TextView 
android:layout_height="50dip" 
android:text="@string/total" 
android:background="@drawable/border_top_textview"
android:textColor="#FFFFFF" 
android:id="@+id/totalCash" 
android:layout_width="match_parent" 
android:gravity="center_vertical" 
android:textSize="26dip" 
android:layout_weight="0.3" 
android:textStyle="bold"></TextView>

以及border_top_textview.xml文件

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
  <shape android:shape="rectangle">
       <stroke android:width="2dp" android:height="2dp" android:color="#FFFFFF" />

        <solid android:color="#000000" />
            <padding android:top="1dp" android:bottom="1dp" />
   </shape></item></layer-list>

我看了你提到的帖子...问题仍然存在,所有textview周围都有pt边框,而不仅仅是顶部。 - tinti
https://dev59.com/-3A75IYBdhLWcg3wf5JV - mH16
你有检查过吗?这个在第一个链接里。 - mH16
其实有人测试过这段代码并将其添加到这里吗?因为从一些旧主题中复制粘贴很容易出现不符合我的要求的情况。无论如何,感谢您的帮助! - tinti
最佳解决方案在这里 https://dev59.com/gWox5IYBdhLWcg3wcTzr#23754336,使用每个边角的值,完美运作。 - jlbofh
3个回答

4

最简单的方法是使用带有所需边框的9 patch图像作为背景。

或者

尝试这个,也许它会对你有所帮助,在顶部创建一条线,看起来就像一个边框:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="line">
        <stroke android:width="5dp" android:color="#FFFF00" />
        <solid android:color="#00000000" />

        <padding android:top="25dp" />

    </shape>
</item>
</layer-list>

我不想使用9 patch图像...我认为只使用xml或java类必须有解决方案。关于你的代码,它是一个“hack”,你在textview中间放了一条线,并将文本放在这条线下面。这并不是我真正想要的。 - tinti
Tinti,我认为这会为你完成工作。 - mH16

2

在这里,您可以将这些行放入形状标签中,

<stroke android:width="4dp" android:color="#FFFFFF" />
<padding android:left="0dp" android:top="7dp"
android:right="0dp" android:bottom="0dp" />

将顶部填充至少设置为5dp,其他部分设置为0dp。


2
public class MyTextView extends TextView {

      public MyTextView(Context context, AttributeSet attrs, int defStyle) {
           super(context, attrs, defStyle);
      }
      public MyTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
      }
      public MyTextView(Context context) {
            super(context);
      }
      @Override
      protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Rect rect = new Rect();
            Paint paint = new Paint();
            paint.setStyle(Paint.Style.STROKE);
            paint.setColor(Color.WHITE);
            paint.setStrokeWidth(3);
            getLocalVisibleRect(rect);
           canvas.drawRect(rect, paint);       
      }
}

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical" 
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
        <samples.test.MyTextView 
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:text="@string/hello" />
</LinearLayout>

看这里

尝试使用图像作为边框并使用此代码,可以很好地解决问题。

enter code here

  <TextView
    android:id="@+id/text1" 
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:drawableTop="@drawable/header1" 
    android:gravity="center" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textStyle="bold"             
    android:textSize="20sp"
    android:textColor="@drawable/selector_icon_text_color"
    android:text="Hussain">
    </TextView>

也许我没有表达清楚,我只想让顶部边框是白色。这个例子会把所有的边框都变成白色。 - tinti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接