首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwitchCompat抛出误差

SwitchCompat抛出误差
EN

Stack Overflow用户
提问于 2014-10-24 18:19:46
回答 2查看 9.1K关注 0票数 26

我正试着在我的片段中使用交换器。最小支持的API为14,最大值为21。我正在尝试应用物质视图来切换所有以前的棒棒糖android版本。但是,当使用下面的代码时,我会得到一个错误:如何纠正它?

代码语言:javascript
复制
<android.support.v7.widget.SwitchCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

在引发异常的java代码中进行充气:

代码语言:javascript
复制
 @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

例外:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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'])
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 23:33:03

SwitchCompat要求设置android:textOnandroid:textOff值,除非设置了app:showText="false"

代码语言:javascript
复制
<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" )

代码语言:javascript
复制
<android.support.v7.widget.SwitchCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:showText="false" />
票数 59
EN

Stack Overflow用户

发布于 2019-09-12 11:42:57

也犯了同样的错误,结果一无所获,也降落在这里。同事提出了一件小事情,为我解决了这一例外;因此,我想把这个留在这里:

SwitchMaterialSwitchCompat在内部使用自定义defStyleAttr。因此,当不提供defStyleAttr时,我总是用0覆盖它的默认代码。这将覆盖父组件中的样式,然后发生崩溃。

将我的构造器更改为:

代码语言:javascript
复制
class MySwitch(
  context: Context,
  attrs: AttributeSet? = null,
  defStyleAttr: Int = 0
) : SwitchMaterial(context, attrs, defStyleAttr)

代码语言:javascript
复制
class MySwitch(
  context: Context,
  attrs: AttributeSet? = null
) : SwitchMaterial(context, attrs)

帮我解决了这个问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26553930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档