2014-01-17 2 views
0

Как получить высоту и ширину представления вида (которое принадлежит другому действию) в текущей деятельности. Например, . Существует кнопка в aactivity, и я должен получить атрибуты кнопки в действии два с помощью своего id. (Я рассмотрел представление, потому что это может быть ImageView, TextView, WebView или что-то еще).Как получить высоту и ширину вида?

Здесь я вставляю код, который я пробовал.

общественный класс SecAct расширяет активность {

ArrayList<Integer> butList1; 
RelativeLayout help; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_two); 
    help = (RelativeLayout)findViewById(R.id.helplay); 
    createWidgets(); 
} 

private void createWidgets() { 
    // TODO Auto-generated method stub 
    butList1=MainActivity.butList; 
    int a=butList1.get(0); 
    View v=(View)(findViewById(a)); 
    int width=v.getWidth(); 
    int height=v.getHeight(); 
    help.addView(v); 
    System.out.println("id is "+ width); 
} 

public void close(View v){ 
    finish(); 
} 

}

Я могу получить значение а, но я не смог получить атрибут у (View), то есть, высота, ширина или id и т. д. Я получаю исключение нулевого указателя.

+0

Где именно ** NPE ** ?? номер строки?? –

+0

Почему вам нужно получить высоту представления из последней активности? –

+0

'View v' должно быть' null'. проверьте, что – R9J

ответ

1

Сначала получить контекст от деятельности зрения, например:

public static Context con; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_one); 
    con = this; 
} 

Затем на другой вид деятельности:

Context context = FIRST_ACTIVITY.con; 
Activity firstActivy = (Activity) context; 
ViewGroup firstActivityView = firstActivy.getWindow().getDecorView().findViewById(android.R.id.content); 
View DISIRED_VIEW = firstActivityView.findViewById(R.id.DISIRED_VIEW_ID); 

Наконец, получить ширину и высоту :

int width = DISIRED_VIEW.getWidth(); 
int height = DISIRED_VIEW .getHeight(); 

Возможно, эти значения (ширина и высота) могут быть равны 0, поэтому вам нужно это сделать:

final int width, height; 
DISIRED_VIEW.post(new Runnable() { 

    @Override 
    public void run() { 
     width = DISIRED_VIEW.getWidth(); 
     height = DISIRED_VIEW.getHeight(); 
    } 
}); 
+0

Работает как волшебство. Большое спасибо боссу. –

0

попробовать getMeasuredHeight() методы

+0

@ Kuni Да, я тоже это пробовал, но он показывает исключение нулевого указателя. –

+0

@BaradwajAryasomayajula Проверить аналогичный вопрос [ссылка] (http://stackoverflow.com/questions/4142090/how-do-you-to-retrieve-dimensions-of-a-view-getheight-and-getwidth-always-r) Это может помочь вам решить вашу проблему – Kunu

0

Вы получаете исключения нулевого указателя обусловленно вы не инициализированы ваш ArrayList butList1. Инициализируйте его и добавьте в него элементы, а затем используйте его. Как this-

butList1 = new ArrayList<Integer>(); 
butList1.add(findviewById(R.id.button_id)); 
+0

Я думаю, что нет необходимости инициализировать butList1 и любым способом инициализировать его в функции createwidgets(). Поэтому я думаю, что это не ошибка. –

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