簡體   English   中英

如何正確設置按鈕的背景可繪制Android

[英]How to Set the Background Drawable of a Button Properly Android

當用戶在模擬器中按下按鈕時,我試圖更改按鈕的背景,但一切正常,但在真實設備上,應用程序崩潰了。 這是我的代碼:

answerOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               answerOne.setBackgroundResource(R.drawable.button_background_green);
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                ValidateAnswer(current5,Answers_six[0]);
            }
        });

並且日志中的錯誤是:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.nasrf.winners10, PID: 9715
                  android.content.res.Resources$NotFoundException: Resource ID #0x7f080060
                      at android.content.res.Resources.getValue(Resources.java:1416)
                      at android.content.res.Resources.getDrawable(Resources.java:861)
                      at android.content.Context.getDrawable(Context.java:402)
                      at android.view.View.setBackgroundResource(View.java:16423)
                      at android.support.v7.widget.AppCompatButton.setBackgroundResource(AppCompatButton.java:83)
                      at com.example.nasrf.winners10.Game.GameActivity$16.onClick(GameActivity.java:426)
                      at android.view.View.performClick(View.java:4802)
                      at android.view.View$PerformClick.run(View.java:20101)
                      at android.os.Handler.handleCallback(Handler.java:810)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:189)
                      at android.app.ActivityThread.main(ActivityThread.java:5529)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)

有什么幫助嗎?

發生這種情況的原因是模擬器和實際設備的SDK有所不同。

您可以先檢查SDK,然后像這樣設置背景-

     if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){
         answerOne.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_background_green));
       }
       else if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)         {
      answerOne.setBackground(getResources().getDrawable(R.drawable.button_background_green));
     } else{
       answerOne.setBackground(ContextCompat.getDrawable(this, R.drawable.button_background_green));
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM