2017-09-12 9 views
0

フローレイアウト(https://github.com/ApmeM/android-flowlayout)を含むフラグメントがあります。このフラグメントにアクセスすると、私のアプリケーションはプログラムで4つのボタンをフローレイアウトに加え、ユーザが自分自身を追加したボタンを追加します。クリックすると、クリックしたブラウザやアプリケーションが開きます。ここでは、それは私のギャラクシータブS2(型式SM-T710)にどのように見えるかのスクリーンショットです:古いデバイスと新しいデバイスのレイアウトが同じに見えるようにボタンのサイズを設定するにはどうすればよいですか?

Video Links tab on Galaxy Tab S2

トップ4つのボタンは、サーバによって提供され、最後のボタン「FB」は、ユーザ定義されています「リンクを追加」ボタンを押して追加したリンク。このユーザー定義リンクは保存され、次回フラグメントにアクセスするときにプログラムで追加されます。別のデバイスであるGalaxy Tab 4(Model SM-T530NU)は、それをTab S2と比較すると古いデバイスだと思います。ここでは、レイアウトはこのタブレット上でどのように見えるかのスクリーンショットは、次のとおりです。

Fragment on Tab 4

このタブレットは、まだ、まだ行で唯一の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ようです。

答えて

0

Display Metricsクラスを使用して、両方のデバイスの幅と高さをピクセル単位で調べ、この高さと幅をチェックするif文を作成しました。それに基づいて、ボタンのサイズを設定しました。これはちょっとハッキリですが、これが私が考えることができる唯一の解決策でした。

関連する問題