2015-01-21 6 views
1

Я создал фоновое изображение, которое точно соответствует дисплею устройства без строки состояния и панели действий. Это означает, что вся высота моего устройства составляет 1280 пикселей. Без панели состояния и панели действий 1038 пикселей. Мое фоновое изображение ровно 1038 пикселей. Когда я установить изображение в качестве фона моего макета:getWindow(). SetBackgroundDrawable stretches background

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    view.setBackground(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath())); 

    .... 
} 

Он прекрасно вписывается в экран, как я хочу, чтобы это. проблема в том, что у меня есть вид прокрутки, и когда я хочу напечатать что-то в своих редакторах, клавиатура всплывает, и мое фоновое изображение становится доступным.

Так я изменил код, чтобы установить фоновое изображение в окно в моей деятельности OnCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.setContentView(R.layout.activity_login); 
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    this.getWindow().setBackground(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath())); 

    ... 
} 

Но почему-то фоновое изображение теперь получает растягивается так, что высота больше, чем оригинал, и я невозможно увидеть весь образ. (около 60 пикселей в высоту).

Что там происходит? Почему «setBackgroundDrawable» растягивает мой образ?

EDIT

Когда я сделать следующее в диалоговом фрагмента, который, по моему мнению, это точно так же, как это делать в деятельности, работает отлично:

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    ... 

    dialog.getWindow().setBackgroundDrawable(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath())); 

    ... 
} 

так почему не правда ли работающих на деятельность?

ответ

2

Вы должны масштабировать изображение, если вы не хотите растягиваться. Для того, чтобы сделать это было бы лучше для меня, чтобы использовать следующее в R.layout.activity_login:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

      <ImageView android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center" 
       android:src="@drawable/yourdrawable" 
       android:scaleType="centerInside"> 
      </ImageView> 

</FrameLayout> 

CENTER_INSIDE будет «масштабировать изображение равномерно (сохранить соотношение сторон изображения в), так что обе размеры (ширина и высота) изображения будет равна или меньше соответствующего размера представления (минус заполнение) ". Для получения дополнительной информации о типах масштабирования вы можете посмотреть здесь: http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

Наконец, стоит отметить, что setBackgroundDrawable осуждался в уровне API 16. И документация предлагается использовать setBackground (вытяжку) вместо этого.

+0

Я никогда не использовал 'setBackgroundDrawable', а фоновое изображение уже отлично масштабируется. Как я упоминал в своем открытии, он идеально подходит, когда я добавляю его в качестве фона для своего макета, но растягивается, когда я устанавливаю его как фоновое изображение окна. – Mulgard

+0

@Mulgard. Я полагаю, что проблема может заключаться в том, что изображение пытается покрыть все окно. И поэтому растягивается. Это может быть тип масштабирования, который используется этим методом. –

2

Если вы не хотите, чтобы ваш взгляд для толкания с помощью клавиатуры добавить

android:isScrollContainer="false" 

Вы можете использовать ImageView вместо зрения. setBackground()

См. this Связанный вопрос.

+0

Ehm ... но это точка ... Я хочу, чтобы мой взгляд был нажат, я просто не хочу, чтобы мой фоновый immage был зажат. вот почему я хотел добавить его в качестве фона окна.но когда я делаю это, он растягивается (без причины, потому что он идеально подходит для размера экрана). – Mulgard

+0

И я должен сказать, что это все равно не работает. Я устанавливаю scrollcontainer в false и добавляет ajustPan в windowSoftInputMode, и изображение все равно становится доступным, когда клавиатура всплывает. – Mulgard

Смежные вопросы