2009-12-27 8 views
7

मैं अपने आवेदन में एक TableLayout उपयोग कर रहा हूँ। इसमें चार टेबलरो शामिल हैं जिनमें प्रत्येक चार छवि दृश्य हैं। मैं जो व्यवहार चाहता हूं वह सबसे कम आयाम फिट करने के लिए लेआउट को स्केल करना है।माता-पिता को लैंडस्केप मोड में भरने के लिए एंड्रॉइड टेबललाउट कैसे प्राप्त किया जा सकता है?

यह पोर्ट्रेट मोड में ठीक काम करता है लेकिन लैंडस्केप मोड में खराब तरीके से विफल रहता है।

documentation से ऐसा लगता है क्योंकि TableRow layout_height हमेशा WRAP_CONTENT पर सेट होता है। मैं के अलग-अलग विचार आयाम सेट कर सकते हैं, TableLayout बिल्कुल अगर मैं FILL_PARENT को देखें layout_height सेट से नहीं चल पाएगी।

मुझे लगता है कि कुछ आसान है जो मुझे याद आ रही है। क्या लैंडस्केप मोड में ऊंचाई फिट करने के लिए टेबलरो के साथ टेबललाउट प्राप्त करने का कोई तरीका है?

एक्सएमएल लेआउट:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/table" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:shrinkColumns="*"> 
</TableLayout> 

जावा:

public class Example extends Activity { 

private TableLayout mTable; 
private int[] mDrawableIds = { R.drawable.draw01, R.drawable.draw02, R.drawable.draw03, R.drawable.draw04, R.drawable.draw05, R.drawable.draw06, R.drawable.draw07, R.drawable.draw08, R.drawable.draw09, R.drawable.draw10, R.drawable.draw11, R.drawable.draw12, R.drawable.draw13, R.drawable.draw14, R.drawable.draw15, R.drawable.draw16 }; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mTable = (TableLayout)findViewById(R.id.table); 
    for (int j=0; j<4; j++) { 
     TableRow tr = new TableRow(this); 
     tr.setLayoutParams(new ViewGroup.LayoutParams( LayoutParams.FILL_PARENT, 
       LayoutParams.WRAP_CONTENT)); 
      for (int i=0; i<4; i++) { 
       ImageView iv = new ImageView(this); 
       iv.setImageResource(mDrawableIds[j*4+i]); 
       iv.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       iv.setAdjustViewBounds(true); 
       tr.addView(iv); 
      } 
     mTable.addView(tr); 
    } 
} 
} 
+0

क्या आपके ग्रिड व्यू आपके उपयोग के मामले में काम नहीं करता है? GridView यहाँ ट्यूटोरियल: http://developer.android.com/guide/tutorials/views/hello-gridview.html –

+0

GridView बजाय स्क्रॉल परिदृश्य लेआउट के लिए ImageViews आकार बदलने के लिए चाहते हैं लगता है। शायद अगर मैंने छवि संसाधनों को छोटा बनाया जो काम कर सकते हैं। मैं छवियों का आकार बदलने से बचने की उम्मीद कर रहा था। –

उत्तर

4

मुझे पता चला कि यह कैसे करें। असल में, वह हिस्सा जो जिस तरह से काम नहीं कर रहा था वह टेबलरो था। जब मैं परिदृश्य में बदल गया, तो पहले दो टेबलरो का आकार बदल नहीं रहा था और तीसरा अंतरिक्ष के बाकी हिस्सों का उपभोग कर रहा था। चौथी पंक्ति बिल्कुल प्रदर्शित नहीं हो रही थी।

मुझे लगा कि मुझे टेबलर के लेआउट_वेट को बराबर मानों पर सेट करने की आवश्यकता है। लेकिन, ऐसा करने की कार्यावधि में कोई विधि नहीं है, इसलिए मैं निम्नलिखित लेआउट फ़ाइल है, जो मैं row.xml बुलाया बनाया:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/trow" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 
</TableRow> 

तो मैं गुण मैं चाहता था के साथ रनटाइम पर एक LayoutInflater इस्तेमाल किया पंक्ति का निर्माण करना :

mTable = (TableLayout)findViewById(R.id.table); 
    LayoutInflater inflater = getLayoutInflater(); 

    for (int j=0; j<4; j++) { 
     View row = inflater.inflate(R.layout.row, mTable,false); 
     TableRow tr = (TableRow)row.findViewById(R.id.trow); 
      for (int i=0; i<4; i++) { 
       View image = inflater.inflate(R.layout.image, tr, false); 
       ImageButton ib = (ImageButton)image.findViewById(R.id.image); 
       ib.setAdjustViewBounds(true); 
       ib.setImageResource(mCardIds[j*4+i]); 
       tr.addView(ib); 
      } 
     mTable.addView(tr); 
    } 

अब TableRows रोटेशन पर ठीक से आकार बदलने कर रहे हैं। मैं ImageButtons को ImageViews बदल क्योंकि मैं कुछ onClick व्यवहार जोड़ने का निर्णय लिया है और मैं एक अलग xml फ़ाइल के माध्यम से उन बटन का निर्माण कर रहा हूँ, लेकिन मुझे नहीं लगता कि उन विवरण का आकार बदलने के मुद्दे के लिए प्रासंगिक हैं।

+0

ऐड 'एंड्रॉयड: layout_weight =" 1 "मेरी समस्या' तालिका शीर्ष पंक्ति में प्रत्येक स्तंभ के लिए हल, अच्छा – knownUnknown

4

करने के लिए अपने एक्सएमएल लेआउट बदलें:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/table" 
     android:layout_width="fill_parent" 
     android:layout_height="160dp" 
     android:shrinkColumns="*"> 
</TableLayout> 

कि यह उन्मुखीकरण की परवाह किए बिना पूरे स्क्रीन की ऊंचाई तक ले बनाना चाहिए। density independent pixels

0

मैंने यहां स्वीकृत समाधान की कोशिश की लेकिन यह काम नहीं किया। नीचे क्या काम किया गया है:

TableRow tr = new TableRow(this); 
TableLayout.LayoutParams pRowTop = new TableLayout.LayoutParams(
       TableLayout.LayoutParams.MATCH_PARENT, 
       TableLayout.LayoutParams.WRAP_CONTENT); 
pRowTop.weight = 1; 
mTable.addView(tr, pRowTop); 
संबंधित मुद्दे