2013-06-16 7 views
6

मैं अपने एंड्रॉइड एप्लिकेशन के लिए एक विजेट बना रहा हूं जिसमें इसके कई बटन होंगे। विजेट के आकार के आधार पर, मैं विजेट पर बटनों की मात्रा बढ़ने और घटाने के लिए चाहता हूं। 4x1 widgetएंड्रॉइड विजेट आकार बदलना

और जब आप इसे 3x1 करने के लिए नीचे हटना: 3x1

वहाँ गतिशील 3x1 ध्यान में रखते हुए 4 बटन को छिपाने के लिए तो अन्य 3 वैसे भी है यह वही है यह वर्तमान में एक 4x1 ध्यान में रखते हुए की तरह लग रहा है बटन squished नहीं मिलता है? वही 2x1 या 1x1 के लिए जाना होगा। इस पर किसी भी इनपुट की सराहना की जाएगी!

धन्यवाद!

+1

आप नियम आदमी तैयार करते हैं! – Piovezan

+1

हाहा धन्यवाद! – BarryBostwick

उत्तर

0

आप onAppWidgetOptionsChanged कॉलबैक को सुनने का प्रयास कर सकते हैं: जब भी लेआउट आकार बदलता है तो उसे आग लगनी चाहिए। हालांकि, आपके विजेट को लेने वाली वास्तविक रीयल एस्टेट की वास्तविक राशि निर्धारित करने के लिए मैंने वास्तव में कोई रास्ता नहीं देखा है (इसलिए अभी) आकार के आधार पर बटन दृश्यता को बदलने का कोई अच्छा तरीका नहीं है।

4

संस्करण 4.1 (एपीआई स्तर 16) से एक नया फ़ंक्शन मिलता है AppWidgetOptions() जो कुछ आकार के पैरामीटर के साथ एक बंडल देता है। here देखें। शायद आप इसकी आवश्यकता के लिए इसका उपयोग कर सकते हैं, लेकिन afaik 4.1 से नीचे के संस्करणों के लिए कोई समान विकल्प नहीं है।

8

जैसा कि सुझाव दिया गया था, आपके पास अपने विजेट प्रदाता में onAppWidgetOptionsChanged लागू करने के अलावा कोई अन्य तरीका नहीं है - API स्तर < 16 उपयोगकर्ताओं को दुर्भाग्य से यह सुविधा नहीं होगी।

विजेट को कम करने के दौरान बटन को छिपाने के लिए, आपके विजेट को "Widgets" (वास्तव में एपविड्जेट्स) पैटर्न के तहत एंड्रॉइड डिज़ाइन साइट में एक उदाहरण के रूप में दिए गए मौसम विजेट के समान व्यवहार करने की आवश्यकता है। विजेट कम होने के कारण, आप कम बटन दिखाते हैं, जितना बटन बढ़ता है, बटन की दृश्यता सेट करता है।

enter image description here

onAppWidgetOptionsChanged में, newOptions बंडल द्वारा दिए गए मानों का उपयोग करके आप चौड़ाई और ऊंचाई में परिवर्तन का पता लगाने और आकार बाल्टी डॉक्स में सलाह दी के रूप में (एक ही डिजाइन पेज से) सेट करना होगा:

वास्तव में, उपयोगकर्ता एक विजेट का आकार बदलता है, इसलिए सिस्टम डीपी आकार सीमा के साथ प्रतिक्रिया देगा जिसमें आपका विजेट स्वयं को फिर से चला सकता है। वैरिएबल ग्रिड आयामों के बजाय "आकार बाल्टी" में विजेट आकार बदलने की रणनीति की योजना बनाना आपको सबसे विश्वसनीय परिणाम देगा।

क्या वास्तव में चुनौती दे रहा है कैसे उन बाल्टियों निर्धारित करने के लिए है। न्यू ऑप्शन बंडल में min_width, min_height, max_width और max_height मान हैं जो डिवाइस, स्क्रीन घनत्व, लॉन्चर्स इत्यादि के बीच काफी भिन्न हैं। दुर्भाग्य से एंड्रॉइड टीम ने हमें यह नहीं दिखाया कि यह कैसे करें, और वेब में onAppWidgetOptionsChanged के कुछ कोड नमूने हैं, उनमें से ज्यादातर बहुत सरल है।

8

जैसा कि उन्होंने पहले ही कहा था। आप onAppWidgetOptionsChanged

तो मेरी प्रस्ताव

1) विभिन्न लेआउट बनाने के लिए उपयोग कर सकते हैं। 3 और 4 बटन के साथ।

2) विजेट कॉलम गिनती पर लेआउट बेस बदलें।

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { 

    // See the dimensions and 
    Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); 

    // Get min width and height. 
    int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); 
    int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT); 

    // Obtain appropriate widget and update it. 
    appWidgetManager.updateAppWidget(appWidgetId, getRemoteViews(context, minWidth, minHeight)); 
    super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); 
} 

/** 
* Determine appropriate view based on row or column provided. 
* 
* @param minWidth 
* @param minHeight 
* @return 
*/ 
private RemoteViews getRemoteViews(Context context, int minWidth, int minHeight) { 
    // First find out rows and columns based on width provided. 
    int rows = getCellsForSize(minHeight); 
    int columns = getCellsForSize(minWidth); 
    // Now you changing layout base on you column count 
    // In this code from 1 column to 4 
    // you can make code for more columns on your own. 
    switch (column) { 
     case 1: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_1column); 
     case 2: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_2column); 
     case 3: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_3column); 
     case 4: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_4column); 
     default: return new RemoteViews(context.getPackageName(), R.layout.activity_layout_widget_4column); 
    } 
} 

/** 
* Returns number of cells needed for given size of the widget. 
* 
* @param size Widget size in dp. 
* @return Size in number of cells. 
*/ 
private static int getCellsForSize(int size) { 
    int n = 2; 
    while (70 * n - 30 < size) { 
     ++n; 
    } 
    return n - 1; 
} 
+1

यह स्वीकार्य उत्तर होना चाहिए –

संबंधित मुद्दे