2017-08-07 66 views
-1

我試圖用3d的樣子來製作一個自定義的按鈕樣式,但是我遇到了按鈕「已按下」狀態的問題。該按鈕可以正確更改圖像,但文字保持不動,這使得文字看起來好像在印刷機上向上滑動。Android中的9個補丁按鈕問題

expected vs reality

(紅色線加到顯示了取消按鈕的基線)

XML爲按鈕視圖(cmdNegative被取消按鈕,layDialogControl是直接上方的按鈕的佈局)

<Button 
    android:id="@+id/cmdPositive" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_positive" 
    android:text="Accept" 
    android:layout_marginTop="8dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:layout_marginBottom="8dp" 
    app:layout_constraintTop_toBottomOf="@+id/layDialogControl" 
    app:layout_constraintEnd_toEndOf="parent" 
    app:layout_constraintStart_toEndOf="@id/cmdNegative" 
    app:layout_constraintBottom_toBottomOf="parent" /> 

用於按鈕樣式的XML(button_gray與button_green完全相同,只是...以及灰色)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_enabled="false" 
     android:drawable="@drawable/button_gray" /> 
    <item 
     android:state_pressed="true" 
     android:state_enabled="true" 
     android:drawable="@drawable/button_green_pressed" /> 
    <item 
     android:state_focused="true" 
     android:state_enabled="true" 
     android:drawable="@drawable/button_green_pressed" /> 
    <item 
     android:state_enabled="true" 
     android:drawable="@drawable/button_green" /> 
</selector> 

未按9補丁:unpressed 9 patch

按下9補丁:pressed 9 patch

據我瞭解,設置在右邊的像素/底部應該已經明確了「內容區」和文本應留在內容視圖,buuuuuuut不是這種情況。任何想法或指針,我已經搞砸了,將不勝感激。

+0

關於我已刪除的編輯,值得注意的是,downvotes並非_necessarily_粗魯 - 更多的時候它們只是消息。如果有人帶着一些可操作的反饋伴隨DV,這是理想的,但他們沒有義務。一般來說,我會建議不要擔心他們。 – halfer

+0

是的,這是偉大的,所有,但無論問題仍然沒有答案,現在可能永遠不會得到答案,因爲它會被埋在任何搜索結果。當最終結果相同時,原因並不重要。 –

+0

社區的最終結果是不同的 - 但如果我們宣傳downvotes總是侮辱的不真實情況,那麼更多SO用戶會認爲它們是敵對行爲,但這可能不是選民的意圖。 – halfer

回答

0

我覺得你誤解了9-patch圖像。您定義的可拉伸區域(頂部和左側)將根據您的佈局定義進行拉伸。定義的內容區域,右側和底部部分將爲您的內容設置限制,類似於指定您的內容將保留的區域的矩形/平方。接受按鈕(按下的)的圖像不會在點擊時拉伸,因此無論您的圖像是什麼樣子都顯示出來。

此外,如果您的圖像中有文字,那麼沒有內容區域的要點。如果你的按鈕圖像有文字定義,那麼你可以通過重新定義你的內容區域來解決你的問題。換句話說,在按壓狀態下,您只是替換了具有正確內容區域的圖像,因此看起來它已經被點擊拉伸,但它實際上只是另一個圖像。

+0

我想你可能誤解了這個問題。新聞按鈕的9個補丁正在渲染,它不僅僅是放大,而且圖像文件中沒有文本(因爲這需要獲取每個按鈕的不同圖像)。我確實爲9個補丁設置了一個內容區域(您可以看到右側和底部有黑色像素),但問題在於內容區域未被使用,它只是繪製文本而不管9-我使用的補丁。如果我錯誤地設置了內容區域,請解釋如何。 –

+0

我重新閱讀你的評論,現在我想你說我的選擇器有問題/我是如何設置風格的,但是如果我做錯了,請解釋一下。 –