0

So in an Activity I have a SurfaceView which I use as a drawing canvas, and 2 layouts to provide UI function. There is a LinearLayout holding buttons and a RelativeLayout which I use later on (it is GONE from the start and called VISIBLE later).

Now the button row doesn't appear correctly on the screen. The buttons are all washed out, as if they are trapped behind the canvas. I have tried setting the alpha with:

 button.getBackground().setAlpha(255);

I have tried making the SurfaceView transparent as in how to make surfaceview transparent but neither of these have worked.

Interestingly if I set the background of the buttons to #ff000000 (as can be seen in some of the buttons below, been testing a few ideas) then it appears completely black on top of the canvas, although obviously it has now lost its button shape which is not what I want!

Here's the layout:

<?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>

Here's an image: How the buttons appear With the LinearLayout having a red background

Community
  • 1
  • 1
Stuart Lacy
  • 1,963
  • 2
  • 18
  • 30

3 Answers3

1

If you want the "Button Row" on top of the layout simply add at the LinearLayout:

android:layout_gravity="bottom"

For default the views added to FrameLayout stacks.

Seeing your layout I noticed too that all the buttons has the visibility to GONE. To chech if the row is on top of the surfaceView add a background to the Button row LinearLayout.

Chronos
  • 1,972
  • 17
  • 22
  • I've added a couple of images to my post to show what it looks like. The row is definitely viewable, see the second image where i put background="#ffff0000" to test. And like I said, if I set the background of the buttons to a solid colour they show fine, it's just when the background is the default button image there is a problem – Stuart Lacy May 11 '12 at 17:10
  • I get it, the problem is that the default buttons have a transparent background for the normal state. You can try to setup another background for the buttons. For example search the android sdk install dir for: android-sdk-mac_86/platforms/android-15/data/res/drawable-xhdpi/btn_default_normal_holo_dark.9.png and copy all the resources to your project, add too the selector located at: android-sdk-mac_86/platforms/android-15/data/res/drawable/btn_default_holo_dark.xml. try a different combination. For example instead of using btn_default_normal_holo_dark use another one for the normal state. – Chronos May 11 '12 at 17:51
1

Your problem has to do with the default image used in the Holo theme on Android 3.0+; take a look at this link, which is the actual 9-patch used in that theme for a default button. Notice how the PNG itself is partially transparent? That means it will partially show through it's background no matter what color you put underneath it. It was designed to be used over the top of the dark backgrounds present in that theme.

All the buttons in the Holo theme are partially transparent, even those in Holo.Light, so you will get this effect with any default button background. Because the transparency is in the background image, setting the alpha of the Drawable won't have any effect. As you've already discovered, you can set the button background to something solid and this is no longer an issue.

If you want a solid button that still maintains the Holo look, I would suggest pulling the PNG images from the linked source I gave and modifying the 9-patches to have a fully solid color underlay.

HTH

devunwired
  • 62,780
  • 12
  • 127
  • 139
0

SurfaceView.setZOrderOnTop(false);hope this can help you

ikaijua
  • 1
  • 3