संपादित
AppBarLayout
v24.0.0 से एक StateListAnimator
कि अपनी स्थिति के आधार पर पदोन्नति को परिभाषित करता है उपयोग करता है। इसलिए setElevation
का उपयोग कोई प्रभाव नहीं होगा यदि StateListAnimator
का उपयोग किया जा रहा है (जो डिफ़ॉल्ट रूप से होता है)। XML के माध्यम से elevation
सेट या प्रोग्राम के रूप में (दोनों एपीआई> = 21 के लिए):
StateListAnimator stateListAnimator = new StateListAnimator();
stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(view, "elevation", 0));
appBarLayout.setStateListAnimator(stateListAnimator);
पुराना जवाब
यह एक issue of the design support library हो रहा है। समस्या setElevation
का उपयोग करके, प्रोग्राम को प्रोग्रामेटिक रूप से सेट करने के तरीके से संबंधित है। इसे एक्सएमएल से सेट करना StateListAnimator
को दृश्य में रख रहा है और setElevation
पर कॉल नहीं कर रहा है। हालांकि, setElevation
काम करना चाहिए।
यहाँ वहाँ एक समाधान नहीं है:
setDefaultAppBarLayoutStateListAnimator(appBarLayout, 0);
@SuppressLint("PrivateResource")
private static void setDefaultAppBarLayoutStateListAnimator(final View view, final float targetElevation) {
final StateListAnimator sla = new StateListAnimator();
// Enabled, collapsible and collapsed == elevated
sla.addState(new int[]{android.R.attr.enabled, android.support.design.R.attr.state_collapsible,
android.support.design.R.attr.state_collapsed},
ObjectAnimator.ofFloat(view, "elevation", targetElevation));
// Enabled and collapsible, but not collapsed != elevated
sla.addState(new int[]{android.R.attr.enabled, android.support.design.R.attr.state_collapsible,
-android.support.design.R.attr.state_collapsed},
ObjectAnimator.ofFloat(view, "elevation", 0f));
// Enabled but not collapsible == elevated
sla.addState(new int[]{android.R.attr.enabled, -android.support.design.R.attr.state_collapsible},
ObjectAnimator.ofFloat(view, "elevation", targetElevation));
// Default, none elevated state
sla.addState(new int[0], ObjectAnimator.ofFloat(view, "elevation", 0));
view.setStateListAnimator(sla);
}
यह क्या निर्माता करता है से लिया जाता है वर्ग ViewUtilsLollipop
में v24.0.0 में एक विधि बुला।
कौन सा 'अपने उदाहरण' stateListAnimator.addState में view' प्रयोग किया जाता है (नई पूर्णांक [0], ObjectAnimator.ofFloat (देखने के लिए, "ऊंचाई", 0)); '? –
@VolodymyrKhodonovych एक एक पैरामीटर – bryant1410
मैं एंड्रॉयड 21 इस तरह में त्रुटि है के रूप में पारित> JNI DETECTED आवेदन में त्रुटि: शून्य कॉल नहीं कर सकते> android.view.View.setElevation (नाव) अशक्त वस्तु –