如何配置按钮大小,以便旧设备和新设备上的布局看起来相同?

时间:2017-09-12 20:40:14

标签: android android-layout

我有一个包含Flow Layout(https://github.com/ApmeM/android-flowlayout)的片段。当访问此片段时,我的应用程序将以编程方式向流布局添加四个按钮以及用户自己添加的任何按钮,单击此按钮将打开我单击的浏览器或应用程序。这是我的Galaxy Tab S2(型号SM-T710)上的样子截图:

Video Links tab on Galaxy Tab S2

前四个按钮由服务器提供,最后一个按钮是FB'是通过按"添加链接"添加的用户定义链接。按钮。此用户定义的链接已保存,并且还将在下次访问片段时以编程方式添加。我有另一个设备,一个Galaxy Tab 4(型号SM-T530NU),我相信它是一个较老的设备,比较它与Tab S2。以下是此平板电脑上布局的截图:

Fragment on Tab 4

这款平板电脑有一个更大的屏幕,但仍然只显示2个子视图。我猜测它与dp vs像素或某些东西有关,但有人知道我怎么能拥有它以便底部UI匹配顶级UI吗?这是我的动态添加按钮的代码。您可以在getLayoutParams()函数中看到按钮的宽度和高度。

private void updateFlowLayout(){
        //Get latest list of user and operator defined video links from middleware
        operatorVideoLinkItemList = getContentManager().getOperatorDefinedVideoLinks();
        userVideoLinkItemList = getContentManager().getUserDefinedVideoLinks();

        for(VideoLinkItem item : operatorVideoLinkItemList){
            final String url = item.getUrl();
            final ImageButton imageButton = new ImageButton(getActivity());
            FlowLayout.LayoutParams layoutParams = getLayoutParams();
            imageButton.setLayoutParams(layoutParams);
            IDongleCoreImage image = item.getIcon();
            String imageFilePath = image.getImageFilePath();
            imageFilePath = "file://"+imageFilePath;
            Picasso.with(getActivity()).load(imageFilePath).resize(250,150).centerInside().placeholder(R.drawable.app_icon).into(imageButton);
            if(StringUtils.containsIgnoreCase(url,"netflix") || StringUtils.containsIgnoreCase(url,"youtube")){
                imageButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onYoutubeOrNetflixClick(url);
                    }
                });
            } else {
                imageButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onUserLinkClick(url);
                    }
                });
            }
            videoLinksFlowLayout.addView(imageButton);
        }

        //Create buttons for each User Defined Video Link and add to Flow Layout
        for(VideoLinkItem item : userVideoLinkItemList) {
            final String title = item.getTitle();
            final String url = item.getUrl();
            final Button button = new Button(getActivity());
            FlowLayout.LayoutParams layoutParams = getLayoutParams();
            button.setLayoutParams(layoutParams);
            button.setTextSize(15);
            button.setText(title);
            button.setTextColor(getResources().getColor(R.color.app_highlight_yellow_color));
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onUserLinkClick(url);
                }
            });
            button.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    onLongUserLinkClick(title, url);
                    return false;
                }
            });
            videoLinksFlowLayout.addView(button);
        }
    }

private FlowLayout.LayoutParams getLayoutParams(){
        FlowLayout.LayoutParams layoutParams;
        if(UiUtils.isTablet()){
            layoutParams = new FlowLayout.LayoutParams(400,300);
            layoutParams.setMargins(0,20,90,0);
        } else {
            layoutParams = new FlowLayout.LayoutParams(420,300);
            layoutParams.setMargins(0,20,50,20);
        }
        return layoutParams;
    }

我有一些想法,也许有经验丰富的人可以指导我: - 我也许可以使用DisplayMetrics类来测量此屏幕的显示指标,并根据它来设置布局参数。这看起来非常虚伪。

1 个答案:

答案 0 :(得分:0)

我使用Display Metrics类查找两个设备的宽度和高度(以像素为单位),并创建了一个if语句,用于检查此高度和宽度。基于此,我设置了按钮大小。这有点hackish但这是我能想到的唯一解决方案。