Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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 - Fatal编程技术网

Android 带有背景色和透明文本的按钮

Android 带有背景色和透明文本的按钮,android,Android,我有一个布局与一些背景图像,并有一个按钮上。比如说,按钮的背景色是白色。现在我想在它上面写一个文本,这样文本就可以通过它显示按钮后面的任何内容(比如透明文本)。现在,很明显,如果我使文本颜色透明,文本将消失,我将看到一个没有文本的白色按钮。如何做到这一点 截图: 两种方法:(1)不精确的解决方案,因为文本对齐应手动编码,但: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

我有一个布局与一些背景图像,并有一个按钮上。比如说,按钮的背景色是白色。现在我想在它上面写一个文本,这样文本就可以通过它显示按钮后面的任何内容(比如透明文本)。现在,很明显,如果我使文本颜色透明,文本将消失,我将看到一个没有文本的白色按钮。如何做到这一点

截图:

两种方法:(1)不精确的解决方案,因为文本对齐应手动编码,但:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button view1 = new Button(this);

    RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.layout1);
    layout1.setBackground(getResources().getDrawable(R.drawable.choose_background));

    layout1.addView(view1);

    Bitmap mainImage = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
    {
        //creating image is not necessary, more important is ability to grab the bitmap.
        Canvas canvas = new Canvas(mainImage);
        canvas.drawColor(Color.WHITE);
        view1.setBackground(new BitmapDrawable(getResources(), mainImage));
    }

    {
        Canvas canvas = new Canvas(mainImage);
        //most interesting part:
        Paint eraserPaint = new Paint();
        eraserPaint.setAlpha(0); //this
        eraserPaint.setTextSize(200);
        eraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); //and this
        canvas.drawText("some", 10, 150, eraserPaint);
    }
}
橡皮擦颜料的想法来自这里和这里

在activity_main.xml中,所有内容都是默认值:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.runup.myapplication2.app.MainActivity">

结果是:

(2) 第二种方法是将此行为添加到类中,以便在xml中使用它。 -带有示例的库项目。您可以添加为库,或者只将ClearTextView类复制到您的项目中(因为它是一个没有xml资源的扩展TextView)。处理配置更改和动态文本和/或背景更改

纵向样本的结果:


在横向视图中:

您可以使用文本视图并为其提供背景图像。文本视图可以像按钮一样单击。默认情况下,它们的背景是透明的。所以,只需准备一个带有雕刻文本的png(好的,每个分辨率一个),就可以了。@DerGolem显然,如果我有一个带有透明文本的png图像,它就可以工作了。我不想使用任何图像。假设我的应用程序中有50-60个甚至更多的按钮。我不能有那么多的图像。因此,我需要一个更好的解决方案。作为替代方案,您可以制作一个自定义控件来扩展视图,在onDraw方法中,它从背景填充中分割出文本。我不知道Android中的HTML显示有多健壮,因为我从来没有机会使用它,但我知道您可以在视图中定义HTML/CSS内容。所以也许可以工作/帮助你尝试一种不同的技巧。@不可分割,我想只有在phonegap中才有可能。+1干得好!但是我想要一个自定义视图,我甚至可以在xml中使用它。你能用它做一个自定义视图吗?将其作为类添加到项目中,并在xml中作为普通文本视图使用。虽然当您尝试动态更改它时,可能会出现一些问题,但这只是一个建议。谢谢,我将尝试使用它!