2014-11-28 4 views
1

Вот мой файл макета, из которого я раздул изображение.Почему мой раздутый ImageView имеет высоту и ширину 0?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.Tamaritz.dailyselfie.MainActivity" > 
<ImageView 
    android:id="@+id/selfieImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/abc_ab_bottom_solid_dark_holo" /> 
<TextView 
    android:id="@+id/timestamp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/selfieImage" 
    /> 

И вот мой код внутри моего основного адаптера, который будет раздувать этот файл макет в поле зрения объектов с классом держателя вида (внутренний статический класс)

static class ViewHolder { 
      ImageView selfieImage; 
      TextView timestamp; 
      public ViewHolder(View selfieLayout) { 
         selfieImage = (ImageView) selfieLayout.findViewById(R.id.selfieImage); 
         timestamp = (TextView) selfieLayout.findViewById(R.id.timestamp); 
      } 
    } 
    .... 
    public View getView(int position, View convertView, ViewGroup parent) { 
      View selfieImage = convertView; 
      ViewHolder holder = null; 
     if(selfieImage == null) { 
       LayoutInflater inflater = (LayoutInflater)context.getSystemService 
(Context.LAYOUT_INFLATER_SERVICE); 
       selfieImage = inflater.inflate(R.layout.activity_main, parent, false); 
       holder = new ViewHolder(selfieImage); 
       int height = holder.selfieImage.getHeight(); 
       int width = holder.selfieImage.getWidth(); 
       selfieImage.setTag(holder); 
      } 
    } 

То, что я в основном пытаюсь сделать это, чтобы воспользоваться шаблоном владельца Android View. Если convertView имеет значение NULL, это означает, что он ранее не накачивался (не может использоваться повторно), поэтому мы должны предпринять шаги для его раздувания. Я передаю завышенное представление в конструктор, чтобы представление могло найти его изображение и текстовое представление. Мой вопрос заключается в том, что изображение было завышено и прикреплено к держателю вида, почему у него высота и ширина 0? (Знайте это, потому что я прошел через мой код). Важно, чтобы эти значения были действительными значениями, потому что я должен использовать их в методе setPic http://developer.android.com/training/camera/photobasics.html.

Я рассмотрел другие возможные темы для моей проблемы. Лицо https://stackoverflow.com/questions/20434257/gridview-setadapter-imageview-width-and-height-0 имело аналогичную проблему, но так и не получило ответа. Этот Why does my FrameLayout have 0 height? не мог быть моей проблемой, потому что пользовательский интерфейс должен был быть нарисован (не называть это в onCreate) И это не могло быть Get ImageView width and height, потому что я не вызывал высоту и ширину внутри конструктора из ImageView И не этот Inflated ImageView to put in GalleryView isn't the right size, потому что я обязательно указал родителя.

Кто-нибудь знает, почему высота и ширина возвращаются 0? Я мог бы жестко задавать высоту и ширину в моем XML-файле, но я считаю, что это плохой стиль.

+2

Я думаю, что это то, что вы ищете: http://stackoverflow.com/questions/5820287/android-textview-has-height-and-width-of-0 –

+0

Оооо спасибо !!! , Не могу поверить, что я не нашел, что один – committedandroider

+0

Будет ли просмотр рисоваться после getView? – committedandroider

ответ

0

Ну, у меня теперь есть компьютер для проверки. Это то, что я пробовал: моя внутренняя часть метода getView приходит именно так, и она может успешно регистрировать ширину и высоту изображения. Это только попытка сделать то, что вы хотите достичь: получить ширину и высоту изображения прямо внутри метода getView. Я понятия не имею, насколько это хорошая практика или нет. Поэтому используйте его на свой страх и риск. Однако я хотел бы предложить вам определить размер внутри вашего xml. Это зависит от вашего требования.

 @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View selfieImage = convertView; 
      final ViewHolder holder; 
      if (selfieImage == null) { 
       LayoutInflater inflater = (LayoutInflater) parent 
         .getContext().getSystemService(
           Context.LAYOUT_INFLATER_SERVICE); 
       selfieImage = inflater.inflate(R.layout.widget_sample_item, 
         parent, false); 
       holder = new ViewHolder(selfieImage); 

       selfieImage.setTag(holder); 

      } else { 
       holder = (ViewHolder) selfieImage.getTag(); 
      } 

      holder.timestamp.setText("this is: " + position + "th child"); 

      selfieImage.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED); 

      int height = holder.selfieImage.getMeasuredHeight(); 
      int width = holder.selfieImage.getMeasuredWidth(); 
      Log.d("image-info", width + " | " + height); 

      return selfieImage; 
     } 
Смежные вопросы