2016-08-04 68 views
3

在我的xml文件中,我使用線性視圖和layout_weights將每個小圓(ImageView)設置爲屏幕25%的大小。
這裏是我的手機屏幕截圖(它應該是怎樣看):如何在線性佈局中修復layout_weight?

enter image description here

在我的平板電腦不會改變大小是在屏幕的25%,這是它的外觀:

enter image description here

我的代碼由三個LinearLayouts具有0.25的權重各含有ImageViews出的1.
下面是代碼:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    xmlns:ads="http://schemas.android.com/apk/res-auto"> 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/imageView12" 
     android:src="@drawable/circle_big" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 

    <LinearLayout 
     android:id="@+id/wrapper" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="1.0" 
     android:layout_centerVertical="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     > 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.03125"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 
     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.09375"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 
     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.09375"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.03125"> 

     </FrameLayout> 


    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/wrapper" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="1.0" 
     android:layout_centerVertical="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:rotation = "120" 
     > 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.03125"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 
     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.4375"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.03125"> 

     </FrameLayout> 


    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/wrapper" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="1.0" 
     android:layout_centerVertical="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:rotation = "60" 
     > 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.03125"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 
     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.4375"> 
     </FrameLayout> 
     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.25" 
      android:id="@+id/imageView12" 
      android:src="@drawable/circle_white" 
      android:onClick="changeToScreenSelectLayout" 
      android:scaleType="fitCenter" 
      android:adjustViewBounds="true" 
      /> 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="0.03125"> 

     </FrameLayout> 


    </LinearLayout> 

</RelativeLayout> 
+0

使用PercentRelativeLayout可能會有幫助。 –

+0

據我所知,佈局權重必須是整數 –

+0

@ cricket_007 **錯誤**。它們可以是浮點值。 –

回答

1

無法將png文件用作circle_white。如果您選擇正確的android:scaleType,您可以在技術上做到這一點,但這會導致可怕的別名渲染。

我會先刪除你現有的pngs(來自每個資源桶),因爲它們不能用於這個。然後在名爲「circle_white.xml」的可繪製文件中創建一個新文件。把它放在裏面,這會畫出一個沒有固有尺寸的圓。 I.E.它只會填充你渲染它的任何東西。

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="#fff"/> 
</shape> 

再使用的ImageView與circle_white的與設置這一新的@繪製/ circle_white後臺HeightMatchesWidthView一個src改變。您需要確保視圖高度與我在下面的視圖擴展中所做的寬度相匹配。改用這只是做了一類新的地方,並粘貼這在XML通過,而不必ImageView的引用它做com.whatever.HeightMatchesWidthView其中com.whatever是什麼包,你把這個英寸

public class HeightMatchesWidthView extends View { 
    public HeightMatchesWidthView(final Context context) { 
     super(context); 
    } 

    public HeightMatchesWidthView(final Context context, final AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public HeightMatchesWidthView(final Context context, final AttributeSet attrs, final int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { 
     int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); 
     setMeasuredDimension(width, width); 
    } 

    @Override 
    protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { 
     super.onSizeChanged(w, w, oldw, oldh); 
    } 
} 

的HeightMatchesWidthView,你也可以使用PercentRelativeLayout來代替它,並使用它來強制它們是正方形,並且正確的大小而不必擴展View以增加對強制平方的支持。

+0

這是白色圓圈從圖片 – sazzy4o

+0

所以它的一個實際的PNG文件? –

+0

是的,這是一個PNG文件從ldpi到xxhdpi – sazzy4o