Android:如何自动将GridView适合所有屏幕尺寸?

时间:2015-08-03 14:31:34

标签: android gridview relativelayout screen-size autosize

我写了一个小应用程序,这是我的第一个Android应用程序。这是一款红外电视远程应用程序,我使用三星Galaxy S4开发,一切似乎运行良好。

这就是它在我的Galaxsy S4上的样子:Screenshot Samsung Galaxy S4

但是自从我发布到Play商店后,我从Galaxy Note 2用户那里得到了另一个屏幕截图,它看起来很混乱并且不适合他的屏幕:Screenshot Samsung Galaxy Note 2

这是我片段的布局代码, 的 fragment_page1.xml

 <?xml version="1.0" encoding="utf-8"?>
 <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">

<TextView
    android:id="@+id/section_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<GridLayout

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical"
    android:rowCount="7"
    android:columnCount="5"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true">






    // POWER

    <ImageButton
        android:onClick="pressPowerButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:id="@+id/power"
        android:layout_row="0"
        android:layout_column="0"
        android:src="@drawable/stand_by"
        android:layout_marginTop="1.5dp"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="SLEEP"
        android:id="@+id/sleep"
        android:textColor="#2299bb"
        android:textSize="12dp"
        android:layout_row="0"
        android:layout_column="1"
        android:layout_marginTop="1.5dp"
        />

    // VOLUME

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Vol +"
        android:id="@+id/volUp"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:layout_row="1"
        android:layout_column="0"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Vol -"
        android:id="@+id/volDown"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:layout_row="2"
        android:layout_column="0"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Mute"
        android:id="@+id/mute"
        android:textColor="#2299bb"
        android:layout_row="3"
        android:layout_column="0"
        />

    // PROGRAM
    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Ch +"
        android:id="@+id/progUp"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:layout_row="1"
        android:layout_column="4"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Ch -"
        android:id="@+id/progDown"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:layout_row="2"
        android:layout_column="4"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="CH LIST"
        android:id="@+id/chList"
        android:textColor="#2299bb"
        android:textSize="12dp"
        android:layout_marginTop="-2dp"
        android:layout_row="3"
        android:layout_column="4"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Info"
        android:id="@+id/info"
        android:textColor="#2299bb"
        android:layout_row="2"
        android:layout_column="3"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Guide"
        android:id="@+id/guide"
        android:textColor="#2299bb"
        android:layout_row="1"
        android:layout_column="3"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="A"
        android:id="@+id/red"
        android:textColor="#cc2200"
        android:textStyle="bold"
        android:layout_row="3"
        android:layout_column="3"
        />

    // MENU

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Menu"
        android:id="@+id/menu"
        android:textColor="#777777"
        android:textSize="12dp"
        android:layout_marginTop="-1.5dp"
        android:layout_row="1"
        android:layout_column="1"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Internet\n\@TV"
        android:id="@+id/internet"
        android:textColor="#777777"
        android:textSize="12dp"
        android:layout_marginTop="-9.5dp"
        android:layout_row="1"
        android:layout_column="2"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Media\nPlay"
        android:id="@+id/media"
        android:textColor="#777777"
        android:textSize="12dp"
        android:layout_marginTop="-9dp"
        android:layout_row="2"
        android:layout_column="2"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Tools"
        android:id="@+id/tools"
        android:textColor="#777777"
        android:textSize="12dp"
        android:layout_marginTop="-2dp"
        android:layout_row="2"
        android:layout_column="1"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Source"
        android:id="@+id/source"
        android:textColor="#777777"
        android:textSize="12dp"
        android:layout_marginTop="-2dp"
        android:layout_row="3"
        android:layout_column="1"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="Content"
        android:id="@+id/content"
        android:textColor="#777777"
        android:textSize="12dp"
        android:layout_marginTop="-2.5dp"
        android:layout_row="3"
        android:layout_column="2"
        />

    // NAVIGATE

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25b2"
        android:id="@+id/up"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_marginTop="-4.5dp"
        android:layout_row="4"
        android:layout_column="2"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25bc"
        android:id="@+id/down"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_row="6"
        android:layout_column="2"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25c0"
        android:id="@+id/left"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_row="5"
        android:layout_column="1"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u23ea"
        android:id="@+id/rewind"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="15dp"
        android:layout_marginTop="-2.5dp"
        android:layout_row="5"
        android:layout_column="0"
        />


    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u23e9"
        android:id="@+id/forward"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="15dp"
        android:layout_marginTop="-2.5dp"
        android:layout_row="5"
        android:layout_column="4"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25b7"
        android:id="@+id/play"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="30dp"
        android:layout_marginTop="-1dp"
        android:layout_row="4"
        android:layout_column="1"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="II"
        android:id="@+id/pause"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_marginTop="-4dp"
        android:layout_row="4"
        android:layout_column="3"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25a0"
        android:id="@+id/stop"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_row="6"
        android:layout_column="3"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="EXIT"
        android:id="@+id/exit"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="12dp"
        android:layout_marginTop="-4dp"
        android:layout_row="6"
        android:layout_column="4"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25cf"
        android:id="@+id/record"
        android:textColor="#777777"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_row="6"
        android:layout_column="1"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="\u25b6"
        android:id="@+id/right"
        android:textColor="#2299bb"
        android:textStyle="bold"
        android:textSize="20dp"
        android:layout_row="5"
        android:layout_column="3"
        />

    <Button
        android:onClick="pressButton"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="ENTER"
        android:id="@+id/ok"
        android:textColor="#118844"
        android:textStyle="bold"
        android:textSize="12dp"
        android:layout_marginTop="-3dp"
        android:layout_row="5"
        android:layout_column="2"
        />

    <Button
        android:onClick="pressButton"
        android:clickable="true"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text="RETURN\u21b6"
        android:id="@+id/back"
        android:textColor="#cc2200"
        android:textStyle="bold"
        android:textSize="12dp"
        android:layout_marginTop="-14dp"
        android:layout_row="4"
        android:layout_column="4"
        />

// PLACEHOLDER

    <Button
        android:clickable="false"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text=""
        android:id="@+id/placeHolder1"
        android:textSize="8dp"
        android:layout_row="0"
        android:layout_column="2"
        />

    <Button
        android:clickable="false"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text=""
        android:id="@+id/placeHolder2"
        android:textSize="8dp"
        android:layout_row="0"
        android:layout_column="3"
        />

    <Button
        android:clickable="false"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:id="@+id/placeHolder3"
        android:textSize="8dp"
        android:layout_row="0"
        android:layout_column="4"
        />

    <Button
        android:clickable="false"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text=""
        android:id="@+id/placeHolder4"
        android:textSize="12dp"
        android:layout_row="4"
        android:layout_column="0"
        android:layout_marginTop="-7dp"
        />

    <Button
        android:clickable="false"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:text=""
        android:id="@+id/placeHolder5"
        android:textSize="12dp"
        android:layout_row="6"
        android:layout_column="0"
        android:layout_marginTop="-4dp"
        />
</GridLayout>

</RelativeLayout>

这是来自 的 MainActivity.java

public class MainActivity extends FragmentActivity implements
    ActionBar.TabListener

{

/* swipe view */
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private android.app.ActionBar actionBar;

// tab titles
private String[] tabs = { "Basic", "Advanced", "Settings"};


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /* init swipe views */
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setAdapter(mAdapter);

    actionBar = getActionBar();
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    for (String tabName : tabs)
        actionBar.addTab(actionBar.newTab().setText(tabName).setTabListener(this));

    /**
     * on swiping the viewpager make respective tab selected
     * */
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // on changing the page
            // make respected tab selected
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });

}

那我怎么能改善这个呢? 我已经阅读了有关它的文章和其他帖子,但到目前为止我没有任何工作。我尝试过fill_parent和match_parent的组合,GridView的wrap_content,RelativeLayout尝试了其他元素,如GridLayout,LinearLayout和TableLayout,但我仍然没有得到它:(

我知道我使用了一些不好的解决方法,如android:layout_marginTop =“ - 2dp”,没有这样的解决方法,我无法在我的Galaxy S4上正确显示它。如何摆脱利润?

所以我正在寻找的是一个自动缩放的GridView,它有5列7行,可以在更大的屏幕上正确显示所有按钮

我是否需要以编程方式执行此操作或仅使用布局文件的解决方案?

如果有人可以帮助我摆脱困境,我会很高兴的!

1 个答案:

答案 0 :(得分:0)

您需要动态调整网格项单元格的高度和宽度。 首先,您需要确定要在网格行中显示的单元格数。 在xml中设置单元格3的网格。 假设每个屏幕都有三个网格单元格。 在YourActivity.java文件中 动态计算屏幕宽度。 然后根据你想要的高度来确定宽高比。

算法:

expectedWidth = (screenWidth/number of cell) - ((padding or marjin between one cell to other)* (number of cell +1)  )
expectedHeight = expectedWidth*aspect ratio 

您可以根据适当的高度调整宽高比