मैं एक रिलेटिव लयआउट और रेडियो ग्रुप का उपयोग करके एंड्रॉइड में एक टैब बार बनाने की कोशिश कर रहा हूं जिसमें एक संकेतक है जो रेडियोग्रुप के भीतर सक्रिय रेडियोबटन को इंगित करने के लिए स्लाइड करेगा।सापेक्ष लयआउट: भाई व्यू समूह के बच्चे को दृश्य संरेखित करें
ये रेडियो बटन अनुकूलित किए गए हैं जो प्रभावी रूप से पाठ पर एक आइकन के साथ आयताकार होते हैं, सभी सामग्री केंद्रित होती है, जो पृष्ठभूमि के लिए एक कस्टम राज्य चयनकर्ता का उपयोग करती है।
यहाँ मेरे वर्तमान पदानुक्रम है:
<RelativeLayout> // Main view of the tab bar
<RadioGroup> // The buttons
<RadioButton />
<RadioButton />
<RadioButton />
</RadioGroup>
<ImageView /> // The indicator
</RelativeLayout>
विचार मैं था जब एक रेडियो बटन क्लिक किया गया, मेरे द्वारा चुने गए रेडियो बटन के शीर्ष & नीचे करने के लिए सूचक संरेखित (और यह चेतन) होता था। हालांकि, ऐसा लगता है कि layout_align<Edge>
केवल एक अन्य दृश्य समूह के सदस्यों के साथ भाई तत्वों के साथ काम करता है, यानी मैं रेडियो ग्रुप को स्वयं संरेखित कर सकता हूं, लेकिन इसके अंदर रेडियोबटन नहीं।
मैंने संकेतक को रेडियो ग्रुप के सदस्य के रूप में डालने का विचार किया, लेकिन चूंकि रेडियो ग्रुप लीनियरलाउट का विस्तार है, इसलिए इसे दिए गए रेडियोबटन के किनारे पर रखने का कोई तरीका नहीं प्रतीत होता है।
क्या कोई इस बारे में सोच सकता है कि मैं इस मुद्दे को कैसे हल कर सकता हूं? या शायद मेरे एनिमेट-एलाइन-टू-बटन तकनीक से बेहतर समाधान है?
अद्यतन @superjos के साथ मदद, मैं इस काफी अच्छी तरह से बाहर काम करने में कामयाब रहे।
मुझे wrap_content
का उपयोग करने के बजाय प्रत्येक बटन को ज्ञात ऊंचाई देना था (आदर्श नहीं, लेकिन इस परियोजना के लिए यह शायद ठीक काम करना चाहिए)। बटन की संकेतक ऊंचाई मिलान करें। सुनिश्चित करें कि रेडियो समूह सामग्री को लपेटने के लिए सेट है और मूल दृश्य में लंबवत केंद्रित है। रेडियोग्रुप को alignTop
और toRightOf
पर संकेतक सेट करें। फिर, बटन के लिए क्लिक करें श्रोता:
int prevY, newY;
int prevButtonIndex, newButtonIndex;
public void moveIndicator(button, indicator, index) {
prevY = newY;
newY = prevY + (index - prevButtonIndex) * button.getHeight();
TranslateAnimation animation = new TranslateAnimation(0, 0, prevY, newY);
animation.setDuration(500);
animation.setFillAfter(true); // stay at final animation position
indicator.setAnimation();
animation.start();
}
बढ़िया! और कार्यान्वयन भी अच्छा लग रहा है! – superjos