2014-12-03 78 views
1

我在我的res/drawable目錄中適當hdpimdpixhdpi,並且xxhdpi膠料創建的圖像,我想使用它們替代常規的按鈕。我已經完成了這部分,但我需要一些佈局和格式的幫助。我會先寫下我的問題,然後我會在下面發佈代碼和兩張截圖。任何建議表示讚賞。謝謝!我的設備上使用自定義圖片,按鈕佈局排號

詳細信息和圖片:

Nexus 5的運行棒棒糖。

hdpi A,B,C,D是96x96。 E是72x72

mdpiA,B,C,D是64x64。 E是48x48。

xhdpi A,B,C,D是128x128。 E是96x96。

xxhdpi A,B,C,D是192x192。 E是144x144。

問題:

1)爲什麼最後一行按鈕E水平拉伸?按鈕E是一個帶有圓角邊緣的正方形,就像所有其他邊緣一樣,但縮小了。它爲什麼伸展,我該如何修復它?

2)我怎樣才能安排與他們之間的空間,將根據屏幕大小動態調整,以保持比例相同的繪圖? (見下圖2)

fragment_main.xml:(見下面的圖片1,看看這個看起來)

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragmentMain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical"> 

    <TableLayout 
     android:id="@+id/fragmentMainTableLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center"> 

     <TableRow 
      android:gravity="center_horizontal" 
      android:layout_weight="0"> 

      <Button 
       android:id="@+id/buttonA" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/a_selector"/> 

      <Button 
       android:id="@+id/buttonB" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/b_selector"/> 

     </TableRow> 

     <TableRow 
      android:gravity="center_horizontal" 
      android:layout_weight="0"> 

      <Button 
       android:id="@+id/buttonC" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/c_selector"/> 

      <Button 
       android:id="@+id/buttonD" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/d_selector"/> 

     </TableRow> 

     <TableRow 
      android:gravity="center|bottom" 
      android:layout_weight="0"> 

      <Button 
       android:id="@+id/buttonE" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/e_selector"/> 

     </TableRow> 

    </TableLayout> 

</LinearLayout> 

圖1,當前佈局:

Current layout

圖2,所需的佈局(但與按鈕E適當形狀):

Desired layout

+0

檢查我答.... – 2014-12-03 06:06:35

回答

1

試試這個。希望它可以幫助你...

enter image description here

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragmentMain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <TableLayout 
     android:id="@+id/fragmentMainTableLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" > 

     <TableRow 
      android:layout_weight="1" 
      android:gravity="center|bottom" 
      android:weightSum="4" > 

      <Button 
       android:id="@+id/buttonA" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:background="@drawable/ic_launcher" /> 

      <Button 
       android:id="@+id/buttonB" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:background="@drawable/ic_launcher" /> 
     </TableRow> 

     <TableRow 
      android:layout_weight="0" 
      android:gravity="center_horizontal" 
      android:weightSum="4" > 

      <Button 
       android:id="@+id/buttonC" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:background="@drawable/ic_launcher" /> 

      <Button 
       android:id="@+id/buttonD" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:background="@drawable/ic_launcher" /> 
     </TableRow> 

     <TableRow 
      android:layout_weight="1" 
      android:gravity="center" > 

      <Button 
       android:id="@+id/buttonE" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_weight="0" 
       android:background="@drawable/ic_launcher" /> 
     </TableRow> 
    </TableLayout> 

</LinearLayout> 

轉換烏爾形象是這樣的。

enter image description here

+0

此答案適當調整E並將其移動到頁面底部時效果良好。你能平分A,B,C,D嗎?我已經嘗試在每個'Button'中添加'android:layout_margin =「10dp」'',並且將它們隔開,但是在A + B行和C + D行之間垂直放置太多空間 – pez 2014-12-03 06:21:04

+0

將此行添加到A,B,C和D按鈕'android:layout_margin =「5dp」'n試試 – 2014-12-03 06:25:11

+0

@pez您可以在第二個TableLayout中將android:gravity =「center」更改爲android:gravity =「bottom」,這會將按鈕按下 – 2014-12-03 06:28:06

4

對於E至適當形,嘗試

<TableRow 
     android:gravity="center" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonE" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/abc_ab_share_pack_holo_dark"/> 

    </TableRow> 

對於間距之間的圖像嘗試使用margin屬性。 下面是與間距的完整代碼:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/fragmentMain" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center" 
android:orientation="vertical"> 

<TableLayout 
    android:id="@+id/fragmentMainTableLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
     android:layout_weight=".5" 
    android:gravity="bottom"> 

    <TableRow 
     android:gravity="center_horizontal" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonA" 
      android:layout_margin="15dip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/abc_ab_share_pack_holo_dark"/> 

     <Button 
      android:id="@+id/buttonB" 
      android:layout_margin="15dip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/abc_ab_share_pack_holo_dark"/> 

    </TableRow> 

    <TableRow 
     android:gravity="center_horizontal" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonC" 
      android:layout_margin="15dip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/abc_ab_share_pack_holo_dark"/> 

     <Button 
      android:id="@+id/buttonD" 
      android:layout_margin="15dip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/abc_ab_share_pack_holo_dark"/> 

    </TableRow> 

</TableLayout> 
<TableLayout 
    android:id="@+id/fragmentMainTableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
     android:layout_weight="0.5" 
    android:gravity="center"> 
    <TableRow 
     android:gravity="center" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonE" 
      android:layout_margin="15dip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/abc_ab_share_pack_holo_dark"/> 

    </TableRow> 

</TableLayout> 

</LinearLayout> 

+0

你'layout_margin'建議的工作,謝謝!但是,我需要將按鈕E向下移動,靠近屏幕底部。現在,其他按鈕是E的重疊部分。是否可以動態地使用「Space」之類的東西?此外,不幸的是,您關於按鈕E的建議沒有任何明顯的影響。 – pez 2014-12-03 05:58:37

+1

你能告訴我你使用什麼設備來查看輸出以及5張圖像的大小是多少? – 2014-12-03 06:03:06

+0

@ Yogonand.N我會將信息添加到主文章 – pez 2014-12-03 06:04:05

0

請與下面的佈局更換圖像的名字,我沒有太大的改變,但是當我測試工作根據自己的需要。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragmentMain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <TableLayout 
     android:id="@+id/fragmentMainTableLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" > 

     <TableRow 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" > 

      <Button 
       android:id="@+id/buttonA" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/a_selector" /> 

      <Button 
       android:id="@+id/buttonB" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/b_selector" /> 
     </TableRow> 

     <TableRow 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" > 

      <Button 
       android:id="@+id/buttonC" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/c_selector" /> 

      <Button 
       android:id="@+id/buttonD" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/d_selector" /> 
     </TableRow> 

     <TableRow 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal"> 

      <Button 
       android:id="@+id/buttonE" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/e_selector" /> 
     </TableRow> 
    </TableLayout> 

</LinearLayout> 
0

試試這個

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 

> 
<TableLayout 
    android:id="@+id/fragmentMainTableLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"> 

    <TableRow 
     android:gravity="center_horizontal" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonA" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/a_selector"/> 

     <Button 
      android:id="@+id/buttonB" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/b_selector"/> 

    </TableRow> 

    <TableRow 
     android:gravity="center_horizontal" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonC" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/c_selector"/> 

     <Button 
      android:id="@+id/buttonD" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/d_selector"/> 

    </TableRow> 

    <TableRow 
     android:layout_marginTop="50dp" 
     android:gravity="center" 
     android:layout_weight="0"> 

     <Button 
      android:id="@+id/buttonE" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/e_selector"/> 

    </TableRow> 

    </TableLayout> 
    </LinearLayout>