2017-05-26 9 views
0

私は100dpの幅と120dpの高さのカードを持っています。アプリが起動すると、各テーブルの行に3枚のカードを追加します(私は、追加)。電話では、これはうまく見えますが、1行あたりの子の数(この場合は3)が動的なものではなく、使用可能な画面スペースを埋めるため、タブレットではオープンスペースが多くあります。もちろん、列を伸ばすだけでカードが広くなります(これは非常に厄介です)。レイアウトにカードを追加し、画面サイズに基づいて列/行の子カウントを自動的に決定できる方法はありますか?テーブル行の子カウントは画面サイズに基づいて

答えて

1

あなたは

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
final DisplayMetrics displayMetrics = new DisplayMetrics(); 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int height = displayMetrics.heightPixels; 
int width = displayMetrics.widthPixels; 

または

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

をロードするカードの必要数を見つけるために、ウィンドウマネージャを使用して画面サイズを取得することができます。

は、より良いあなたはより多くのカードがあるので、あなたの答えには高さと幅を切り替え

int padding = 5; 
float cardwidth = width*0.25 - padding; // card with 25% width of screen 

     int count = width /cardwidth ; // 
+0

は、しかし、携帯電話は、より高い解像度を持つタブレットのために完璧に動作し、たとえば画面幅 に比例して、カードの幅を設定しますスクリーンに収まるよりも電話のバージョンで。 – XvKnightvX

+1

あなたは120の代わりに幅を120に固定するのではなく、画面幅の25%のように画面幅のパーセンテージ値として計算します。cardwidth = width * 0.25 – AnshaD

+0

元の回答に素早く調整して、行ごとの数を正しく設定する - 'int cardPerRow = width/100 /(int)displayMetrics.density; // 100はカードの幅です – XvKnightvX

関連する問題