Щоб встановити фон:
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Це найкращий спосіб зробити це?
RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);
Це найкращий спосіб зробити це?
Відповіді:
layout.setBackgroundResource(R.drawable.ready);
правильно.
Ще один спосіб досягти цього - використовувати наступне:
final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) );
} else {
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
}
Але я думаю, що проблеми виникають тому, що ви намагаєтеся завантажити великі зображення.
Ось хороший підручник, як завантажувати великі растрові карти.
ОНОВЛЕННЯ:
застарене (int) getDrawable (int) на рівні 22
getDrawable(int )
тепер застаріло на рівні 22 API. Натомість слід використовувати наступний код із бібліотеки підтримки:
ContextCompat.getDrawable(context, R.drawable.ready)
Якщо ви посилаєтесь на вихідний код ContextCompat.getDravable , він дає вам щось подібне:
/**
* Return a drawable object associated with a particular resource ID.
* <p>
* Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned
* drawable will be styled for the specified Context's theme.
*
* @param id The desired resource identifier, as generated by the aapt tool.
* This integer encodes the package, type, and resource entry.
* The value 0 is an invalid identifier.
* @return Drawable An object that can be used to draw this resource.
*/
public static final Drawable getDrawable(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
return ContextCompatApi21.getDrawable(context, id);
} else {
return context.getResources().getDrawable(id);
}
}
Детальніше про ContextCompat
Щодо API 22, ви повинні використовувати getDrawable(int, Theme)
метод замість getDravable (int).
ОНОВЛЕННЯ:
Якщо ви використовуєте бібліотеку підтримки v4, наступного буде достатньо для всіх версій.
ContextCompat.getDrawable(context, R.drawable.ready)
Вам потрібно буде додати наступне у своїй програмі build.gradle
compile 'com.android.support:support-v4:23.0.0' # or any version above
Або за допомогою ResourceCompat в будь-якому API, як нижче:
import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
if(buttonBackground.equals(R.drawable.myDrawable))
де Drawable buttonBackground = myButton.getBackground();
я отримую цю помилку: snag.gy/weYgA.jpg
myActivity.getTheme()
остання версія методу, а не нульовий параметр:myView.setBackground( getResources().getDrawable(R.drawable.my_background, activity.getTheme()));
AppCompatResources.getDrawable(this.getContext(), resId)
замість цього, Google вже реалізував це у AppCompat*
віджеті / перегляді, наприклад:android.support.v7.widget.AppCompatCheckBox
Спробуйте це:
layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
і для API 16 <:
layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
getResources().getDrawable()
. Правильний код так layout.setBackgroundResource(R.drawable.ready);
само, як і використовуваний ОП. Проблема тут пов'язана з розміром растрової карти.
RelativeLayout relativeLayout; //declare this globally
тепер, усередині будь-якої функції, як onCreate, onResume
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
Ви також можете встановити фон будь-якого зображення:
View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
(.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
внутрішній код
Я використовую minSdkVersion 16 і targetSdkVersion 23.
Наступне працює для мене, він використовує
ContextCompat.getDrawable(context, R.drawable.drawable);
Замість використання:
layout.setBackgroundResource(R.drawable.ready);
Швидше використовувати:
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
getActivity()
використовується у фрагменті, якщо виклик із використання активності this
.
Якщо ваші фони зараз у папці, що витягується, спробуйте перемістити зображення з папки, що перетворюється, у папку dravable-nodpi у вашому проекті. Це працювало для мене, здається, що ще зображення переробляються ними самостійно.
Використовуйте жировий ніж, щоб прив’язати ресурс, що виводиться, до змінної, додавши це у верхній частині вашого класу (перед будь-якими методами).
@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;
то всередину додайте один із ваших методів
layout.setBackground(background);
Це все, що вам потрібно
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.ready));
else if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
layout.setBackground(getResources().getDrawable(R.drawable.ready));
else
layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
Спробуйте ViewCompat.setBackground(yourView, drawableBackground)
спробуйте це.
int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
preview = (ImageView) findViewById(R.id.preview);
preview.setBackgroundResource(res);
setBackground(getContext().getResources().getDrawable(R.drawable.green_rounded_frame));
Всередині програми / res / your_xml_layout_file .xml
remoteViews.setInt(R.id.btn_start,"setBackgroundResource", R.drawable.ic_button_start);