0

所以在一个 Activity 中,我有一个 SurfaceView 用作绘图画布,还有 2 个布局来提供 UI 功能。有一个 LinearLayout 持有按钮和一个我稍后使用的 RelativeLayout(它从一开始就消失了,后来称为 VISIBLE)。

现在按钮行没有正确显示在屏幕上。纽扣都被洗掉了,好像被困在画布后面一样。我尝试使用以下方法设置 alpha:

 button.getBackground().setAlpha(255);

我曾尝试使 SurfaceView 透明,就像如何使SurfaceView 透明一样,但这些都没有奏效。

有趣的是,如果我将按钮的背景设置为#ff000000(如下面的一些按钮所示,一直在测试一些想法),那么它在画布上看起来完全是黑色的,尽管显然它现在已经失去了按钮的形状这不是我想要的!

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TopLevelView"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<!--  Drawing Surface -->
<stu.test.project.DrawingSurface
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/drawingSurface"/>

<!--  Button Row -->
<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:id="@+id/ButtonRow">
        <!--  START BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Start"
            android:visibility="gone"
            android:id="@+id/startDrawingButtonId"/>
        <!--  FINISH BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Finish"
            android:visibility="gone"
            android:id="@+id/finishButtonId"/>
        <!--  RESET BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#ff000000"
            android:text="Restart"
            android:visibility="gone"
            android:id="@+id/resetButtonId"/>
        <!--  HOME BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Home"
            android:background="#ff000000"
            android:visibility="gone"
            android:id="@+id/homeButtonId"/>
        <!--  RESTART BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Restart"
            android:background="#ff000000"
            android:visibility="gone"
            android:id="@+id/restartButtonId"/>
        <!--  SAVE BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Save"
            android:background="#ff000000"
            android:visibility="gone"
            android:id="@+id/saveButtonId"/>
        <!--  STATS BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Stats"
            android:visibility="gone"
            android:id="@+id/statsButtonId"/>
        <!--  EMAIL BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Send email"
            android:visibility="gone"
            android:background="#ff000000"
            android:id="@+id/emailButtonId"/>
        <!--  LOAD BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Load another record"
            android:visibility="gone"
            android:background="#ff000000"
            android:id="@+id/loadButtonId"/>
        <!--  MARKS BUTTON -->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add marks"
            android:visibility="gone"
            android:id="@+id/marksButtonId"/>       
</LinearLayout>

<!--  Here is the Marking Scheme Layout -->
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:background="@drawable/marks_background"
    android:id="@+id/marksRelativeLayout">
    <!--  Element Title -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:id="@+id/markTitle"
        android:padding="10dp"/>
    <!--  Instructions -->
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Enter the score"
         android:id="@+id/markDescription"
         android:padding="10dp"
         android:layout_centerHorizontal="true"
         android:layout_below="@id/markTitle"/>
     <!--  Previous Button -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Previous"
        android:id="@+id/previousMarkButton"
        android:layout_below="@id/markDescription"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"/>
    <!--  Marking Scheme -->
    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="10dp"
        android:layout_below="@id/markDescription"
        android:layout_toRightOf="@id/previousMarkButton"
        android:id="@+id/marksRadioGroup">
        <RadioButton 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"
            android:id="@+id/radioButton0"/>
        <RadioButton 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1"
            android:id="@+id/radioButton1"/>
        <RadioButton 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2"
            android:id="@+id/radioButton2"/>
    </RadioGroup>
    <!-- Next Button -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Next"
        android:id="@+id/nextMarkButton"
        android:layout_below="@id/markDescription"
        android:layout_marginRight="10dp"
        android:layout_toRightOf="@id/marksRadioGroup"/>
    <!--  Done Button -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Done"
        android:id="@+id/doneMarkButton"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:layout_below="@id/marksRadioGroup"/>
</RelativeLayout>

</FrameLayout>

这是一张图片: 按钮的显示方式 使用具有红色背景的 LinearLayout

4

3 回答 3

1

如果您想要布局顶部的“按钮行”,只需在 LinearLayout 中添加:

android:layout_gravity="bottom"

默认情况下,视图添加到 FrameLayout 堆栈。

看到您的布局,我也注意到所有按钮都可以看到 GONE。要检查该行是否位于 surfaceView 的顶部,请向 Button 行 LinearLayout 添加背景。

于 2012-05-11T14:31:51.800 回答
1

您的问题与 Android 3.0+ 上 Holo 主题中使用的默认图像有关;看看这个链接,这是该主题中用于默认按钮的实际 9-patch。请注意 PNG 本身是如何部分透明的?这意味着无论您在其下方放置什么颜色,它都会通过其背景部分显示。它旨在用于该主题中存在的深色背景的顶部。

Holo 主题中的所有按钮都是部分透明的,甚至 Holo.Light 中的按钮也是如此,因此您可以使用任何默认按钮背景获得这种效果。因为透明度在背景图像中,所以设置 alphaDrawable不会有任何效果。正如您已经发现的那样,您可以将按钮背景设置为纯色,这不再是问题。

如果您想要一个仍然保持 Holo 外观的纯色按钮,我建议从我提供的链接源中提取 PNG 图像,并修改 9-patches 以具有完全纯色的底层。

高温高压

于 2012-05-11T17:30:03.723 回答
0

SurfaceView.setZOrderOnTop(false);希望对你有帮助

于 2014-07-26T04:08:41.713 回答