Intereting Posts
Перезагрузка WebView, когда Fragment в ViewPager сохраняется в форме BackStack Кордовая мука не доступна Android: Как я могу создать массив Drawable? BitmapFactory.Options дает 0 ширину и высоту Как изменить цвет фона строки состояния Android Равномерные интервальные представления с использованием ConstraintLayout Как программно извлекать все и выполнять размеры приложений, использование ЦП? При попытке найти Chromecast – MediaRouter.Callback никогда не вызывается в моем приложении для некоторых моих пользователей Espresso – Выполнение действия не работает в полноэкранном режиме – InjectEventSecurityException Экран входа в систему Android Facebook без клавиатуры КоординаторЛайт внутри другого координатораLayout Ошибка проверки включенности Bluetooth в Android (REQUEST_ENABLE_BT не может быть разрешен переменной) Как правильно использовать Git в Android Studio? Для чего вы используете Android Terminal Emulator? Есть ли способ предварительного просмотра векторного чертежа

Как программно установить drawableLeft на кнопку Android?

Я динамически создаю кнопки. Сначала я создал их с использованием XML, и я пытаюсь взять XML ниже и сделать его программным.

<Button android:id="@+id/buttonIdDoesntMatter" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="buttonName" android:drawableLeft="@drawable/imageWillChange" android:onClick="listener" android:layout_width="fill_parent"> </Button> 

Это то, что у меня есть до сих пор. Я могу сделать все, кроме выталкиваемых.

 linear = (LinearLayout) findViewById(R.id.LinearView); Button button = new Button(this); button.setText("Button"); button.setOnClickListener(listener); button.setLayoutParams( new LayoutParams( android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT ) ); linear.addView(button); 

Solutions Collecting From Web of "Как программно установить drawableLeft на кнопку Android?"

Для этого вы можете использовать метод setCompoundDrawables . См. Пример здесь . Я использовал это без использования setBounds и он сработал. Вы можете попробовать в любом случае.

UPDATE : Копирование кода здесь означает, что ссылка идет вниз

 Drawable img = getContext().getResources().getDrawable( R.drawable.smiley ); img.setBounds( 0, 0, 60, 60 ); txtVw.setCompoundDrawables( img, null, null, null ); 

или

 Drawable img = getContext().getResources().getDrawable( R.drawable.smiley ); txtVw.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null); 

или

 txtVw.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley, 0, 0, 0); 

Просто вы можете попробовать это и

 txtVw.setCompoundDrawablesWithIntrinsicBounds(R.drawable.smiley, 0, 0, 0); 
 myEdtiText.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley,0, 0, 0,); 

Для меня это сработало:

 button.setCompoundDrawablesWithIntrinsicBounds(com.example.project1.R.drawable.ic_launcher, 0, 0, 0); 

Я сделал это:

  // Left, top, right, bottom drawables. Drawable[] drawables = button.getCompoundDrawables(); // get left drawable. Drawable leftCompoundDrawable = drawables[0]; // get new drawable. Drawable img = getContext().getResources().getDrawable(R.drawable.ic_launcher); // set image size (don't change the size values) img.setBounds(leftCompoundDrawable.getBounds()); // set new drawable button.setCompoundDrawables(img, null, null, null); 

Как @ Jérémy Reynaud, указывая, как описано в этом ответе , самый безопасный способ установить левую растяжку без изменения значений других чертежей (сверху, вправо и снизу), используя предыдущие значения с помощью кнопки с setCompoundDrawablesWithIntrinsicBounds :

 Drawable leftDrawable = getContext().getResources() .getDrawable(R.drawable.yourdrawable); // Or use ContextCompat // Drawable leftDrawable = ContextCompat.getDrawable(getContext(), // R.drawable.yourdrawable); Drawable[] drawables = button.getCompoundDrawables(); button.setCompoundDrawablesWithIntrinsicBounds(leftDrawable,drawables[1], drawables[2], drawables[3]); 

Таким образом, все ваши предыдущие доступные будут сохранены.

Попробуйте:

 ((Button)btn).getCompoundDrawables()[0].setAlpha(btn.isEnabled() ? 255 : 100); 
 String countryIso = objPrefs.getAddBusinessFlagCode(); countryIso = countryIso.toLowerCase(); add_business_country.setCompoundDrawablesWithIntrinsicBounds(getApplicationContext().getResources().getIdentifier("drawable/" + countryIso, null, getApplicationContext().getPackageName()), 0, 0, 0);