2012-08-24 57 views
0

好的,我知道這個問題已經在不同的問題中討論過了,但我在這裏嘗試了一種不同的方法。android - 將按鈕添加到自定義視圖

這是我的自定義視圖類:

public class MyView extends View { 
    Button mButton; 

    public MyView(Context context) { 
     super(context); 
     mButton = new Button(context); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     //Sets the size needed. 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.save(); 
     //Draws some graphics. 
     canvas.restore(); 

     canvas.save(); 
      RectF boundRect = new RectF(left,top,right,bottom); 
      canvas.clipRect(boundRect); 
      mButton.layout(0,0,canvas.getWidth(),canvas.getHeight()); 
      mButton.draw(canvas); 
     canvas.restore(); 
    } 
} 

這繪製按鈕,在正確的位置和大小,但是,該按鈕似乎半透無法點擊。有誰知道爲什麼以及如何解決它?

回答

0

我不知道是否有人在跟蹤這個問題,但我不覺得讓問題保持開放是正確的。 看來,你可以做到這一點直接擴展視圖類,但你也必須實現的ViewGroup實現了一些接口:

  • android.graphics.drawable.Drawable.Callback
  • android.view.KeyEvent.Callback
  • android.view.ViewManager
  • android.view.ViewParent
  • android.view.accessibility.AccessibilityEventSource

這將使按鈕可點擊。

我還發現透明度來自默認的ICS Holo Dark主題,所以事實上該按鈕有點透明是可取的。最終,不想重新發明輪子,我選擇擴展ViewGroup而不是View。

0

您是否在活動中設置了OnClickListener? 您的視圖不會顯示點擊,因爲您還沒有爲點擊狀態設置不同的樣式。 創建您的文件夾中繪製一個新的XML文件,例如black_button_style:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" > 
    <shape> 
     <solid 
      android:color="#343434" /> 
     <stroke 
      android:width="1dp" 
      android:color="#171717" /> 
     <corners 
      android:radius="3dp" /> 
     <padding 
      android:left="3dp" 
      android:top="10dp" 
      android:right="3dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 
<item> 
    <shape> 
     <gradient 
      android:startColor="#343434" 
      android:endColor="#171717" 
      android:angle="270" /> 
     <stroke 
      android:width="1dp" 
      android:color="#171717" /> 
     <corners 
      android:radius="4dp" /> 
     <padding 
      android:left="3dp" 
      android:top="10dp" 
      android:right="3dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

在XML佈局文件中設置視圖的背景:

android:background="@drawable/black_button_style" 
+0

這錯過了使用android標準按鈕的整個想法......沒有佈局,我想使用按鈕的默認樣式並單擊處理... setClickable(true)當然沒有效果,因爲按鈕默認是可點擊的。 –

相關問題