1

对于Android开发来说很新颖,我需要知道如何以实用的方式更改我的片段中ListView的大小以覆盖整个屏幕? match_parent,fill_parent不起作用。如何更改片段的大小?

我已经硬编码的500dp

这里价值观是我的片段

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="500dp" 
     android:layout_height="500dp" 
     android:divider="@null" 
     android:dividerHeight="0dp" 
     android:layout_marginTop="0dp"> 
    </ListView> 

</RelativeLayout> 

,这里是JAVA我的片段代码:

import android.app.ListFragment; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.LinearLayout; 
import java.util.List; 



public class MyFragment extends ListFragment { 

    List<data> flowers = new datadata().getdatas(); 


    public MyFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     dataArrayAdapter adapter = new dataArrayAdapter(getActivity(), 
       R.layout.data_listitem, 
       flowers); 
     setListAdapter(adapter); 


    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.my_fragment, container, false); 

     return rootView; 
    } 

} 

这里是我的主要活动类

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/myContainer" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scrollbarStyle="insideOverlay" 
    android:scrollbars="none" 
    android:fadeScrollbars="true" 
    android:fitsSystemWindows="true" 
    android:layout_gravity="top" 
    > 
</ScrollView > 

这是我的主要活动的Java代码:

package mshirvan.example.com.netplex; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Fragment; 
import android.content.Intent; 
import android.media.Image; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.FrameLayout; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 
import android.view.View.OnClickListener; 

import data.row1; 


public class MainActivity extends Activity { 

    public static float screenx = 0; 
    public static float screeny = 0; 
    public static int screenpixelx = 0; 
    public static int screenpixely = 0; 


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

     ScreenUtility utility = new ScreenUtility(this); 
     screenx = utility.getWidth(); 
     screeny = utility.getHeight(); 
     screenpixelx = utility.getPixelWidth(); 
     screenpixely = utility.getPixelHeight(); 

     MyFragment frag = new MyFragment(); 

     getFragmentManager().beginTransaction() 
       .add(R.id.myContainer, frag) 
       .commit(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     if (id == R.id.action_settings) { 
      ScreenUtility utility = new ScreenUtility(this); 
      String output = "Width: " + utility.getWidth() + ", " + 
        "Height: " + utility.getHeight(); 

      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

请发布您的活动代码和布局 – 2014-11-14 19:45:44

+0

user1429595 2014-11-14 20:04:28

+0

您是否在ScrollView中添加片段? 请编辑您的问题并在其中添加您的活动代码。 – 2014-11-14 20:06:57

回答

0

把这些在你的列表视图太:

的android:layout_width = “match_parent” 机器人:layout_height = “match_parent”

,或者你可以在包含listview的片段 中将布局参数更改为match_parent。

+0

我做了,它没有工作:(有没有办法通过代码? – user1429595 2014-11-14 19:48:08

+0

@ user1429595有,但你需要在活动课上做它。请问你能提供吗? – 2014-11-14 19:49:02

+0

是啊得到​​一个参考你的listview在你的rootview的findviewbyid()oncreateview并设置其layoutparameters(在线检查) – PrisonMike 2014-11-14 19:51:02

0

您必须设置碎片容器高度以匹配父级而非ListView。在你的情况下,ListView将填充它的父高度。 ListView的父亲是RelativeLayout,RelativeLayout的高度是matchParent,意思是说,RelativeLayout也会填充它的容器,它的容器就是你的活动布局文件中定义的片段占位符。您必须将该容器的高度设置为matchParent。

0

我认为问题在于您试图将片段添加到ScrollView。对于片段的容器使用FrameLayoutandroid:layout_height=match_parent,如果您必须添加多个片段,则可以在活动的布局中定义多个FrameLayout或动态添加它们。

1

将以下内容添加到您的片段RelativeLayout中。这应该是如下:

android:layout_width="match_parent" 
android:layout_height="500dp" 

例如地图布局片段应该如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="500dp" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" 
    > 

    <com.google.android.gms.maps.MapView 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentTop="true" /> 

</RelativeLayout> 

然后在主要布局添加此片段布局。