How can use ?attr/colorAccent in databinding expressions?
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
add a comment |
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
add a comment |
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
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
android android-databinding
asked Nov 11 at 10:29
Doctor Henry
567514
567514
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
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}"
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
add a comment |
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
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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}"
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
add a comment |
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}"
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
add a comment |
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}"
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}"
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
add a comment |
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
add a comment |
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
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
add a comment |
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
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
add a comment |
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
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
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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