2016-01-12 135 views
0

我想以編程方式設置支持所有屏幕大小的textview高度和寬度。如何在android中以編程方式設置支持所有屏幕大小的佈局高度和寬度?

這是我activity.xml中,我有兩個LinearLayout中。在第二佈局我把多個TextView的動態多於10或12

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="60dp" 
    android:orientation="horizontal" 
    tools:context="com.example.sagargajera.setballs.MainActivity"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="6"> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/layout_balls" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_gravity="center" 
     android:orientation="horizontal" 
     android:background="#3F51B5" 
     android:layout_weight="1"> 

     <!--Here i tried to put layout and inside this layout i want to put textview. --> 
    </LinearLayout> 
</LinearLayout> 

這是我的MainActivity.java其中我試圖根據我的循環來創建佈局和TextView的。

package com.example.sagargajera.setballs; 

import android.graphics.Color; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.view.Gravity; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    LinearLayout layout; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     layout=(LinearLayout)findViewById(R.id.layout_balls); 

//  DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); 
//  int width = displayMetrics.widthPixels; 
//  int height = displayMetrics.heightPixels; 

     for(int i=1;i<=12;i++){ 
//   LinearLayout.LayoutParams param1=new LinearLayout.LayoutParams(width, (height/7)); 
      LinearLayout.LayoutParams param1=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); 
      LinearLayout layout_1=new LinearLayout(this); 
      layout_1.setOrientation(LinearLayout.HORIZONTAL); 
      layout_1.setLayoutParams(param1); 
      layout_1.setGravity(Gravity.CENTER); 
      layout_1.setBackgroundColor(Color.parseColor("#f32f32")); 

      LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20,20); 
      param1.weight=1; 
      TextView tv=new TextView(this); 
      tv.setGravity(Gravity.CENTER); 
      tv.setLayoutParams(params); 
      tv.setText("" + i); 
      tv.setBackgroundDrawable(getResources().getDrawable(R.drawable.cicle)); 
      tv.setTextColor(Color.parseColor("#FFFFFF")); 

      layout_1.addView(tv); 
      layout.addView(layout_1); 
     } 
    } 
} 

這裏是我的screenshort enter image description here 以上這創造佈局以及TextView的代碼。 Textview在動態佈局中設置,動態佈局在我的xml特定佈局layout_balls中設置。

問題是,當我運行這個程序,在小型設備它給我完美的輸出,但是當我運行這個程序,在大型設備或平板電腦的輸出是出乎意料的。

請幫我解決了這個問題很長一段時間。

回答

0

你可以得到的器件密度是這樣的:

float scaledDensity = getResources().getDisplayMetrics().scaledDensity; 
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20 * scaledDensity,20 * scaledDensity); 
     param1.weight=1; 
+0

你做了偉大的工作,對我來說。非常感謝。 –

0

有下面一些後有點變化。

float scaledDensity = getResources().getDisplayMetrics().scaledDensity; 
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20 * scaledDensity,20 * scaledDensity); 
     param1.weight=1; 

唯一的變化是我們需要浮點轉換成INT因此使用下面:

float scaledDensity = getResources().getDisplayMetrics().scaledDensity; 
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20 * (int)scaledDensity,20 * (int)scaledDensity); 
      param1.weight=1;//This is the correct answer. 
相關問題