Кнопки Android не отображаются поверх SurfaceView
Таким образом, в Activity у меня есть SurfaceView, который я использую как холст для рисования, и 2 макета для обеспечения функции пользовательского интерфейса. Есть кнопки, удерживающие LinearLayout, и RelativeLayout, который я использую позже (он УДАЛЕН с самого начала и называется VISIBLE позже).
Теперь строка кнопки не отображается правильно на экране. Все кнопки размыты, как если бы они оказались в ловушке за холстом. Я попытался установить альфа с:
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>
Вот изображение:
3 ответа
Ваша проблема связана с изображением по умолчанию, используемым в теме Holo на Android 3.0+; взгляните на эту ссылку, которая является фактическим 9-патчем, используемым в этой теме для кнопки по умолчанию. Заметьте, как сам PNG частично прозрачен? Это означает, что он будет частично отображаться на фоне, независимо от того, какой цвет вы используете под ним. Он был разработан для использования поверх темных фонов, присутствующих в этой теме.
Все кнопки в теме Holo частично прозрачны, даже кнопки в Holo.Light, так что вы получите этот эффект с любым фоном кнопок по умолчанию. Поскольку прозрачность на фоновом изображении, установка альфа Drawable
не будет иметь никакого эффекта. Как вы уже обнаружили, вы можете установить фон кнопки на что-то твердое, и это больше не проблема.
Если вам нужна сплошная кнопка, которая по-прежнему сохраняет внешний вид Holo, я бы посоветовал извлечь изображения PNG из связанного источника, который я дал, и изменить 9-патчи, чтобы получить полностью сплошную цветную подложку.
НТН
Если вы хотите, чтобы "Строка кнопок" поверх макета просто добавлялась в LinearLayout:
android:layout_gravity="bottom"
По умолчанию представления добавляются в стеки FrameLayout.
Увидев ваш макет, я также заметил, что все кнопки имеют вид, чтобы УЖЕ. Чтобы проверить, находится ли строка поверх SurfaceView, добавьте фон в строку Button LinearLayout.