フラグメントでswitchcompatを使用しようとしています。サポートされている最小APIは14、最大は21です。マテリアライズドビューを適用して、Lollipop以前のすべてのバージョンに切り替えようとしていますAndroidバージョン。ただし、以下のコードを使用すると、エラーが発生します。修正しますか?
<Android.support.v7.widget.SwitchCompat
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
例外をスローしているJavaコードで膨らませる:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_scheduler_ui, container, false);
参照: http://Android-developers.blogspot.in/2014/10/appcompat-v21-material-design-for-pre.html
例外:
10-24 14:15:15.880 1561-1561/com.stackoverflow.ranjith.androidprojdel E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.stackoverflow.ranjith.androidprojdel, PID: 1561
Java.lang.NullPointerException
at Android.text.Layout.getDesiredWidth(Layout.Java:67)
at Android.support.v7.widget.SwitchCompat.makeLayout(SwitchCompat.Java:570)
at Android.support.v7.widget.SwitchCompat.onMeasure(SwitchCompat.Java:495)
at Android.view.View.measure(View.Java:16497)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
at Android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.Java:1404)
at Android.widget.LinearLayout.measureVertical(LinearLayout.Java:695)
at Android.widget.LinearLayout.onMeasure(LinearLayout.Java:588)
at Android.view.View.measure(View.Java:16497)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:310)
at Android.view.View.measure(View.Java:16497)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:310)
at Android.view.View.measure(View.Java:16497)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
at com.Android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.Java:327)
at Android.view.View.measure(View.Java:16497)
at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:5125)
at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:310)
at com.Android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.Java:2291)
at Android.view.View.measure(View.Java:16497)
at Android.view.ViewRootImpl.performMeasure(ViewRootImpl.Java:1916)
at Android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.Java:1113)
at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:1295)
at Android.view.ViewRootImpl.doTraversal(ViewRootImpl.Java:1000)
at Android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.Java:5670)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:761)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:574)
at Android.view.Choreographer.doFrame(Choreographer.Java:544)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:747)
at Android.os.Handler.handleCallback(Handler.Java:733)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5017)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:779)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:595)
at dalvik.system.NativeStart.main(Native Method)
Build.gradle:
dependencies {
compile 'com.Android.support:cardview-v7:+'
compile 'com.Android.support:recyclerview-v7:+'
compile 'com.Android.support:palette-v7:+'
compile 'com.Android.support:support-v4:+'
compile "com.Android.support:appcompat-v7:21.0.+"
compile fileTree(dir: 'libs', include: ['*.jar'])
}
SwitchCompat
では、Android:textOn
を設定しない限り、Android:textOff
とapp:showText="false"
の値を設定する必要があります。
<Android.support.v7.widget.SwitchCompat
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textOn="ON"
Android:textOff="OFF" />
または(XMLファイルの先頭にxmlns:app="http://schemas.Android.com/apk/res-auto"
があると仮定します)
<Android.support.v7.widget.SwitchCompat
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:showText="false" />
同じエラーが発生し、何も見つからず、ここに着陸しました。同僚は、私にとってこの例外を修正する1つの小さなことを提案しました。だから私はこれをここに残したかった:
SwitchMaterial
またはSwitchCompat
は、内部でカスタムdefStyleAttr
を使用します。したがって、提供されていない場合は常にdefStyleAttrを0でオーバーライドするデフォルトのコード。これにより、親コンポーネントのスタイルが上書きされ、クラッシュが発生します。
コンストラクターの変更:
class MySwitch(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : SwitchMaterial(context, attrs, defStyleAttr)
に
class MySwitch(
context: Context,
attrs: AttributeSet? = null
) : SwitchMaterial(context, attrs)
私のために問題を解決しました