How can use ?attr/colorAccent in databinding expressions?












0














I have a XML field that I want to change based on an 'ObservableBoolean' like this:



<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<variable
name="isColored"
type="androidx.databinding.ObservableBoolean"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.consoleco.console.customView.PerTextView
android:layout_width="0dp"
android:layout_height="48dp"
android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"
android:gravity="center"
android:text="@string/save"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>


In this line of code above:



android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


we can't use two '?' mark (IDE give error: expected, got ?'
How can I resolve this problem?










share|improve this question



























    0














    I have a XML field that I want to change based on an 'ObservableBoolean' like this:



    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    >
    <data>
    <variable
    name="isColored"
    type="androidx.databinding.ObservableBoolean"
    />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <com.consoleco.console.customView.PerTextView
    android:layout_width="0dp"
    android:layout_height="48dp"
    android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"
    android:gravity="center"
    android:text="@string/save"
    android:textColor="@color/white"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    />
    </androidx.constraintlayout.widget.ConstraintLayout>
    </layout>


    In this line of code above:



    android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


    we can't use two '?' mark (IDE give error: expected, got ?'
    How can I resolve this problem?










    share|improve this question

























      0












      0








      0







      I have a XML field that I want to change based on an 'ObservableBoolean' like this:



      <?xml version="1.0" encoding="utf-8"?>
      <layout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      >
      <data>
      <variable
      name="isColored"
      type="androidx.databinding.ObservableBoolean"
      />
      </data>
      <androidx.constraintlayout.widget.ConstraintLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      >
      <com.consoleco.console.customView.PerTextView
      android:layout_width="0dp"
      android:layout_height="48dp"
      android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"
      android:gravity="center"
      android:text="@string/save"
      android:textColor="@color/white"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      />
      </androidx.constraintlayout.widget.ConstraintLayout>
      </layout>


      In this line of code above:



      android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


      we can't use two '?' mark (IDE give error: expected, got ?'
      How can I resolve this problem?










      share|improve this question













      I have a XML field that I want to change based on an 'ObservableBoolean' like this:



      <?xml version="1.0" encoding="utf-8"?>
      <layout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      >
      <data>
      <variable
      name="isColored"
      type="androidx.databinding.ObservableBoolean"
      />
      </data>
      <androidx.constraintlayout.widget.ConstraintLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      >
      <com.consoleco.console.customView.PerTextView
      android:layout_width="0dp"
      android:layout_height="48dp"
      android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"
      android:gravity="center"
      android:text="@string/save"
      android:textColor="@color/white"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      />
      </androidx.constraintlayout.widget.ConstraintLayout>
      </layout>


      In this line of code above:



      android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


      we can't use two '?' mark (IDE give error: expected, got ?'
      How can I resolve this problem?







      android android-databinding






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 at 10:29









      Doctor Henry

      567514




      567514
























          2 Answers
          2






          active

          oldest

          votes


















          1














          You can use a BindingAdapter for this (add this in a class):



          @BindingAdapter("isColored")
          public static void isColored(View view, boolean isColored){
          TypedValue typedValueColor = new TypedValue();
          view.getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValueColor, true);
          if(isColored){
          view.setBackground(typedValueColor.data);
          } else {
          view.setBackground(view.getContext().getResources().getColor(R.color.grayBackground));
          }
          }


          And in your xml layout replace this:



          android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


          With this:



          app:isColored="@{isColored}"





          share|improve this answer





















          • Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
            – Doctor Henry
            Nov 12 at 6:40



















          0














          Yes that is true. you can not use ?attr in your expression.



          For now only work you can do is use @color/colorAccent instead of ?attr/colorAccent






          share|improve this answer























          • But I have to use ?attr/colorAccent because of several styles made in app
            – Doctor Henry
            Nov 11 at 10:39






          • 1




            @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
            – Radesh
            Nov 11 at 10:52











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247846%2fhow-can-use-attr-coloraccent-in-databinding-expressions%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          You can use a BindingAdapter for this (add this in a class):



          @BindingAdapter("isColored")
          public static void isColored(View view, boolean isColored){
          TypedValue typedValueColor = new TypedValue();
          view.getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValueColor, true);
          if(isColored){
          view.setBackground(typedValueColor.data);
          } else {
          view.setBackground(view.getContext().getResources().getColor(R.color.grayBackground));
          }
          }


          And in your xml layout replace this:



          android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


          With this:



          app:isColored="@{isColored}"





          share|improve this answer





















          • Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
            – Doctor Henry
            Nov 12 at 6:40
















          1














          You can use a BindingAdapter for this (add this in a class):



          @BindingAdapter("isColored")
          public static void isColored(View view, boolean isColored){
          TypedValue typedValueColor = new TypedValue();
          view.getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValueColor, true);
          if(isColored){
          view.setBackground(typedValueColor.data);
          } else {
          view.setBackground(view.getContext().getResources().getColor(R.color.grayBackground));
          }
          }


          And in your xml layout replace this:



          android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


          With this:



          app:isColored="@{isColored}"





          share|improve this answer





















          • Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
            – Doctor Henry
            Nov 12 at 6:40














          1












          1








          1






          You can use a BindingAdapter for this (add this in a class):



          @BindingAdapter("isColored")
          public static void isColored(View view, boolean isColored){
          TypedValue typedValueColor = new TypedValue();
          view.getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValueColor, true);
          if(isColored){
          view.setBackground(typedValueColor.data);
          } else {
          view.setBackground(view.getContext().getResources().getColor(R.color.grayBackground));
          }
          }


          And in your xml layout replace this:



          android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


          With this:



          app:isColored="@{isColored}"





          share|improve this answer












          You can use a BindingAdapter for this (add this in a class):



          @BindingAdapter("isColored")
          public static void isColored(View view, boolean isColored){
          TypedValue typedValueColor = new TypedValue();
          view.getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValueColor, true);
          if(isColored){
          view.setBackground(typedValueColor.data);
          } else {
          view.setBackground(view.getContext().getResources().getColor(R.color.grayBackground));
          }
          }


          And in your xml layout replace this:



          android:background="@{isColored ? ?attr/colorAccent : @color/grayBackground"


          With this:



          app:isColored="@{isColored}"






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 11 at 16:20









          Cezar Mihai

          113




          113












          • Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
            – Doctor Henry
            Nov 12 at 6:40


















          • Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
            – Doctor Henry
            Nov 12 at 6:40
















          Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
          – Doctor Henry
          Nov 12 at 6:40




          Thanks a lot for good details. Your solution will work well. But I prefer simpler solutions than @BindingAdapter.
          – Doctor Henry
          Nov 12 at 6:40













          0














          Yes that is true. you can not use ?attr in your expression.



          For now only work you can do is use @color/colorAccent instead of ?attr/colorAccent






          share|improve this answer























          • But I have to use ?attr/colorAccent because of several styles made in app
            – Doctor Henry
            Nov 11 at 10:39






          • 1




            @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
            – Radesh
            Nov 11 at 10:52
















          0














          Yes that is true. you can not use ?attr in your expression.



          For now only work you can do is use @color/colorAccent instead of ?attr/colorAccent






          share|improve this answer























          • But I have to use ?attr/colorAccent because of several styles made in app
            – Doctor Henry
            Nov 11 at 10:39






          • 1




            @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
            – Radesh
            Nov 11 at 10:52














          0












          0








          0






          Yes that is true. you can not use ?attr in your expression.



          For now only work you can do is use @color/colorAccent instead of ?attr/colorAccent






          share|improve this answer














          Yes that is true. you can not use ?attr in your expression.



          For now only work you can do is use @color/colorAccent instead of ?attr/colorAccent







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 11 at 15:04

























          answered Nov 11 at 10:35









          Radesh

          3,11611330




          3,11611330












          • But I have to use ?attr/colorAccent because of several styles made in app
            – Doctor Henry
            Nov 11 at 10:39






          • 1




            @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
            – Radesh
            Nov 11 at 10:52


















          • But I have to use ?attr/colorAccent because of several styles made in app
            – Doctor Henry
            Nov 11 at 10:39






          • 1




            @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
            – Radesh
            Nov 11 at 10:52
















          But I have to use ?attr/colorAccent because of several styles made in app
          – Doctor Henry
          Nov 11 at 10:39




          But I have to use ?attr/colorAccent because of several styles made in app
          – Doctor Henry
          Nov 11 at 10:39




          1




          1




          @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
          – Radesh
          Nov 11 at 10:52




          @DoctorHenry oh crap . yes that must be solved in the future but for now nothing you can do . i mean i can not found to solve and forget databinding
          – Radesh
          Nov 11 at 10:52


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247846%2fhow-can-use-attr-coloraccent-in-databinding-expressions%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          這個網誌中的熱門文章

          Xamarin.form Move up view when keyboard appear

          Post-Redirect-Get with Spring WebFlux and Thymeleaf

          Anylogic : not able to use stopDelay()