Android
समन्वयकलेयआउट और व्यवहार
खोज…
परिचय
कोऑर्डिनेटर लयआउट एक सुपर-पावर्ड फ्रेम लयआउट है और इस व्यूग्रुप का लक्ष्य उन विचारों को समन्वित करना है जो इसके अंदर हैं।
CoordinatorLayout की मुख्य अपील एक्सएमएल फ़ाइल के भीतर विचारों के एनिमेशन और बदलाव को समन्वित करने की अपनी क्षमता है।
समन्वयक लयआउट दो प्राथमिक उपयोग मामलों के लिए अभिप्रेत है:
: एक शीर्ष-स्तरीय अनुप्रयोग सजावट या क्रोम लेआउट के रूप में
: एक या अधिक बच्चे के विचारों के साथ एक विशिष्ट बातचीत के लिए एक कंटेनर के रूप में
टिप्पणियों
CoordinatorLayout एक कंटेनर है जो FrameLayout विस्तार FrameLayout ।
एक संलग्न द्वारा CoordinatorLayout.Behavior का एक सीधा बच्चे को CoordinatorLayout , आप अवरोधन स्पर्श घटनाओं, खिड़की सन्निवेश वाली, माप, लेआउट, और नेस्टेड स्क्रॉल कर सकेंगे।
एक CoordinatorLayout बच्चे के विचारों के लिए Behaviors निर्दिष्ट करके आप एक ही माता-पिता के भीतर कई अलग-अलग बातचीत प्रदान कर सकते हैं और उन विचारों को एक दूसरे के साथ बातचीत भी कर सकते हैं। जब एक CoordinatorLayout बच्चे के रूप में DefaultBehavior एनोटेशन का उपयोग कर उपयोग किया जाता है, तो दृश्य कक्षाएं एक डिफ़ॉल्ट व्यवहार निर्दिष्ट कर सकती हैं।
एक साधारण व्यवहार बनाना
Behavior बनाने के लिए CoordinatorLayout.Behavior विस्तार करें।
समन्वयकलेयआउट.बेहेवियर का विस्तार करें
उदाहरण:
public class MyBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
/**
* Default constructor.
*/
public MyBehavior() {
}
/**
* Default constructor for inflating a MyBehavior from layout.
*
* @param context The {@link Context}.
* @param attrs The {@link AttributeSet}.
*/
public MyBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
इस व्यवहार को एक बच्चे को एक CoordinatorLayout दृश्य से CoordinatorLayout की आवश्यकता है जिसे कॉल किया जाना है।
प्रोग्राम को व्यवहारिक रूप से संलग्न करें
MyBehavior myBehavior = new MyBehavior();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
params.setBehavior(myBehavior);
XML में एक व्यवहार संलग्न करें
XML में व्यवहार संलग्न करने के लिए आप layout_behavior विशेषता का उपयोग कर सकते हैं:
<View
android:layout_height="...."
android:layout_width="...."
app:layout_behavior=".MyBehavior" />
स्वचालित रूप से एक व्यवहार संलग्न करें
यदि आप एक कस्टम दृश्य के साथ काम कर रहे हैं तो आप @CoordinatorLayout.DefaultBehavior एनोटेशन का उपयोग करके व्यवहार को संलग्न कर सकते हैं:
@CoordinatorLayout.DefaultBehavior(MyBehavior.class)
public class MyView extends ..... {
}
SwipeDismissBehavior का उपयोग करना
SwipeDismissBehavior एक साथ हमारे लेआउट में खारिज करने के लिए कड़ी चोट की कार्यक्षमता किसी भी देखें और औजार पर काम करता है CoordinatorLayout ।
महज प्रयोग करें:
final SwipeDismissBehavior<MyView> swipe = new SwipeDismissBehavior();
//Sets the swipe direction for this behavior.
swipe.setSwipeDirection(
SwipeDismissBehavior.SWIPE_DIRECTION_ANY);
//Set the listener to be used when a dismiss event occurs
swipe.setListener(
new SwipeDismissBehavior.OnDismissListener() {
@Override public void onDismiss(View view) {
//......
}
@Override
public void onDragStateChanged(int state) {
//......
}
});
//Attach the SwipeDismissBehavior to a view
LayoutParams coordinatorParams =
(LayoutParams) mView.getLayoutParams();
coordinatorParams.setBehavior(swipe);
दृश्य के बीच निर्भरता बनाएँ
विचारों के बीच निर्भरता बनाने के लिए आप CoordinatorLayout.Behavior का उपयोग कर सकते हैं। आप एक View को दूसरे View से लंगर डाल सकते हैं:
-
layout_anchorविशेषता का उपयोग करना। - एक कस्टम
Behaviorबनाने औरlayoutDependsOnविधि को लागू करने के लिएtrueवापसी।
उदाहरण के लिए, किसी अन्य के स्थानांतरित होने पर ImageView को स्थानांतरित करने के लिए एक Behavior बनाने के लिए (उदाहरण टूलबार), निम्न चरणों का पालन करें:
public class MyBehavior extends CoordinatorLayout.Behavior<ImageView> {...}layoutDependsOnओवरराइडlayoutDependsOnविधिtrueलौटना। हर बार लेआउट में परिवर्तन होने पर इस विधि को कहा जाता है:@Override public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) { // Returns true to add a dependency. return dependency instanceof Toolbar; }जब भी विधि का
layoutDependsOntrue, तो विधिonDependentViewChangedको कहा जाता है:@Override public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) { // Implement here animations, translations, or movements; always related to the provided dependency. float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); }