フローレイアウト(https://github.com/ApmeM/android-flowlayout)を含むフラグメントがあります。このフラグメントにアクセスすると、私のアプリケーションはプログラムで4つのボタンをフローレイアウトに加え、ユーザが自分自身を追加したボタンを追加します。クリックすると、クリックしたブラウザやアプリケーションが開きます。ここでは、それは私のギャラクシータブS2(型式SM-T710)にどのように見えるかのスクリーンショットです:古いデバイスと新しいデバイスのレイアウトが同じに見えるようにボタンのサイズを設定するにはどうすればよいですか?
トップ4つのボタンは、サーバによって提供され、最後のボタン「FB」は、ユーザ定義されています「リンクを追加」ボタンを押して追加したリンク。このユーザー定義リンクは保存され、次回フラグメントにアクセスするときにプログラムで追加されます。別のデバイスであるGalaxy Tab 4(Model SM-T530NU)は、それをTab S2と比較すると古いデバイスだと思います。ここでは、レイアウトはこのタブレット上でどのように見えるかのスクリーンショットは、次のとおりです。
このタブレットは、まだ、まだ行で唯一の2の子ビューを示している大きな画面を持っています。私はそれがdpとピクセルか何かこれらの行に沿った何かと関係があると推測していますが、下の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クラスを使用することができます。しかし、これは非常にhackishようです。