2014-12-25 75 views
1

我想讓按鈕將會改變上下文的一部分,但match_parent不工作的屬性。match_parent不工作xml android

了Java的主要文件:

class public MainActivity extends ActionBarActivity { 

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

     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setIcon(R.drawable.ic_launcher); 

     Button bn1 = (Button) findViewById(R.id.navbar_1); 
     Button bn2 = (Button) findViewById(R.id.navbar_2); 

     bn1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FragmentMeters fr = new FragmentMeters(); 
       FragmentManager fm = getFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       ft.replace(R.id.layout_to_replace, fr); 
       ft.commit(); 

      } 
     }); 

     bn2.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FragmentValues fr = new FragmentValues(); 
       FragmentManager fm = getFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       ft.replace(R.id.layout_to_replace, fr); 
       ft.commit(); 



      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

} 

然後另一個Java類FragmentMeters(以及類似FragmentValues):

public class FragmentMeters extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_meters, null); 

     return view; 
    } 

} 

及主要XML,像這樣:

<LinearLayout 
    android:id="@+id/navbar" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="82dp" 
    android:background="@color/highlighted_text_material_dark" 
    android:weightSum="4"> 

    <Button 
     android:id="@+id/navbar_1" 
     android:text="@string/navbar_1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:textSize="13sp" 
     android:background="@android:color/transparent" 
     android:gravity="bottom|center_horizontal" /> 
    <Button 
     android:id="@+id/navbar_2" 
     android:text="@string/navbar_2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:textSize="13sp" 
     android:background="@android:color/transparent" 
     android:gravity="bottom|center_horizontal" /> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/layout_to_replace" 
    android:orientation="horizontal" 
    android:layout_below="@+id/navbar" 
    android:layout_width="match_parent" 
    android:background="@color/dim_foreground_disabled_material_dark" 
    android:layout_height="82dp" 
    android:weightSum="4"/> 

而且我試圖用這個fragment_meters.xml替換LinearLayout(id =「layout_to_replace」):

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="horizontal" 
     android:layout_below="@+id/navbar" 
     android:layout_width="match_parent" 
     android:layout_height="82dp" 
     android:background="@color/dim_foreground_disabled_material_dark" 
     android:weightSum="4"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:text="METERS"/> 

    </LinearLayout> 

但我發現了這一點:

enter image description here

匹配它的父的寬度/高度代替。

回答

2

我知道這個問題,在某些情況下,當膨脹佈局參數layout_width和layout_height更改爲包裝內容。

我建議你設置佈局PARAMS充氣後手動:

View view = inflater.inflate(R.layout.fragment_meters, null); 
view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 

(身高這樣對你想要什麼)

+0

是的,這工作對我很好。謝謝 !但我不得不使用RadioGroup.LayoutParams而不是LayoutParams –

+0

但是我怎樣才能將它設置爲比match_parent或match_content更多? :/ –

+0

你談論身高? –

0

刪除android:weightSum="4"LinearLayout與編號@+id/layout_to_replace應解決您的問題。

您還應該考慮在相應的TextView上添加gravity屬性。

0

它的最好辦法是增加資源文件中調用夢詩值的文件夾.XML,並添加有一個捫,像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <dimen name="width">100dp</dimen> 
    <dimen name="height">100dp</dimen> 
</resources> 

,並在Java代碼中,你應該通過上下文得到資源的價值,就像這樣:

int width = getApplicationContext().getResources().getDimension(R.dimen.width); 
int height = getApplicationContext().getResources().getDimension(R.dimen.height); 
+0

謝謝,只需要使用getAction()。而不是getApplicationContext()。因爲在片段內部使用它。我們正在返回浮動。再次感謝 ! –

0

@托馬什 - 約翰,這個問題是完全一樣@利蘭 - 佩雷茨認爲:從fragment_meters你的觀點並沒有在運行時"match_parent"。但解決方案應該是不同的。

原因是因爲當您在FragmentMeters中膨脹此視圖時,您將null作爲「查看根」傳遞!當沒有「查看根」在膨脹時傳遞 - 那麼從fragment_meters xml的「根元素」佈局參數將被忽略,因此這不是"match_parent"LinearLayout

相反,你需要做的: inflater.inflate(R.layout.fragment_meters, parent)

attachToRoot設置爲false(當你不想讓你的觀點被添加到父) inflater.inflate(R.layout.fragment_meters, parent, false);

從以下回答一些更多的鏈接可能是有用的,以及: https://stackoverflow.com/a/25528527/3134602