2014-01-04 4 views
0

я есть RelativeLayout вот код:Layout Params GetWidth() возвращает нулевое

<RelativeLayout 
    android:id="@+id/camerapreview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="10dp" 
    android:background="#000"> 
</RelativeLayout> 

его камеру предварительного просмотра для приложения камеры, я установить width в match_parent.

и вот мой Java-код:

RelativeLayout preview = (RelativeLayout) findViewById(R.id.camerapreview); 
int w = preview.getWidth(); 
LayoutParams params = preview.getLayoutParams(); 
params.width = w; 
params.height = w; 
preview.addView(mPreview); 

в основном я decalaired ширина RelativeLayout в match_parent быть динамичным к ширине любого устройства. Но я хочу, чтобы представление было квадратным, поэтому я использовал java code abave, но каждый раз, когда я запускал программу, эта строка int w = preview.getWidth(); возвращает ноль. Я, должно быть, что-то пропустил, помогите пожалуйста: D спасибо.

+0

где вы пишете этот код? это onCreate()? –

+0

yes @GopalRao its on onCreate() – CENT1PEDE

ответ

3

это может помочь вам ...

RelativeLayout preview = (RelativeLayout) findViewById(R.id.camerapreview); 
    int width = getResources().getDisplayMetrics().widthPixels; 
    ViewGroup.LayoutParams params = preview.getLayoutParams(); 
    params.width = width; 
    params.height = width; 
    preview.setLayoutParams(params); 

здесь preview будет занимать всю ширину экрана ... и будет квадратной формы ...

+0

это, вероятно, правильно, но предварительный просмотр камеры растянут горизонтально, возможно, потому что значение ширины - это пиксели, как я могу преобразовать это в DP? – CENT1PEDE

+1

@ GreenFox см. Здесь http://stackoverflow.com/questions/4605527/converting-pixels-to-dp и http://stackoverflow.com/questions/8309354/formula-px-to-dp-dp-to-px -android. есть много результатов, когда вы вводите ** конвертировать пиксели в dp в android ** в поиске Google ... –

3

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

view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 
int widht = view.getMeasuredWidth(); 
int height = view.getMeasuredHeight(); 

есть три способа сделать это, увидеть это link

EDIT

вы также можете использовать это.

RelativeLayout layout = (RelativeLayout) findViewById(R.id.camerapreview); 
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     hs.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     int width = layout.getMeasuredWidth(); 
     int height = layout.getMeasuredHeight(); 

    } 
}); 
+0

RelativeLayout preview = (RelativeLayout) findViewById (R.id.camerapreview); \t \t preview.measure (MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); \t \t int width = preview.getMeasuredWidth(); \t \t LayoutParams params = preview.getLayoutParams(); \t \t params.width = ширина; \t \t params.height = ширина; \t \t preview.addView (mPreview); Я сделал это, и его все еще ноль, я сделал это правильно? – CENT1PEDE

+0

см. Мой Edit @GreenFox, вы видели ссылку? –

1

Макет имеет ширину 'match parent'. Так что, если он не открывается вид (пусто) ширина = 0.
Решение:
Добавить просмотров макет
Или установить ширину «заполнить родителя»

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