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

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

 

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

 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); 

Для этого вы можете использовать метод 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); 

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

 button.setCompoundDrawablesWithIntrinsicBounds(com.example.project1.R.drawable.ic_launcher, 0, 0, 0); 
 myEdtiText.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley,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); 

Может быть полезно:

 TextView location; location=(TextView)view.findViewById(R.id.complain_location); //in parameter (left,top,right,bottom) any where you wnat to put location.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.arrow,0); 

как указывает @ 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); 
  • Что означает восклицательный знак на Java?
  • Может ли Android SDK работать с JDK 1.7?
  • Как запустить Java-программу без основного метода?
  • java: Class.isInstance vs Class.isAssignableFrom
  • Почему Spring MVC отвечает 404 и сообщает «Нет сопоставления для HTTP-запроса с URI в DispatcherServlet»?
  • Как создать интерфейс между fragmentом и адаптером?
  • Использование пользовательского шрифта в android TextView с помощью xml
  • Сортировка коллекций (список , метод сравнения )
  • как я могу открыть календарь из своего приложения?
  • Форма слишком большого исключения
  • Выполнение динамического кода
  • Давайте будем гением компьютера.