2012-04-11 32 views
9

Tôi có một thanh công cụ MapView với thanh tác vụ được hỗ trợ bởi ActionBarSherlock. Thanh tác vụ được chia thành hai phần (trên màn hình "hẹp") và được phủ/bán trong suốt (android: windowActionBarOverlay là true). Nhiều hoặc ít hơn như ứng dụng Google Maps.Xác định xem thanh tác vụ có bị chia tách hay không

Bây giờ tôi muốn đẩy chế độ xem trên đầu bản đồ, ở cuối màn hình vẫn giữ nó ở phía trên thanh tác vụ phía dưới. Vấn đề của tôi ở đây là tôi không biết chiều cao của thanh tác vụ phía dưới. Thành thật mà nói, tôi thậm chí không thể tìm thấy một cách để biết nếu nó được rút ra hay không. getHeight() dường như trả về chiều cao của thanh tác vụ hàng đầu (hoặc có lẽ đó là chiều cao của cả hai nhưng tôi vẫn không biết liệu thanh tác vụ dưới cùng có tồn tại hay không)

Vui lòng cho tôi biết thông tin này là đúng trước mắt tôi!

Trả lời

2

các thanh dưới cùng phải phù hợp với chiều cao của thanh tác vụ thông thường. Do đó, sử dụng ?android:attr/actionBarSize (hoặc trong trường hợp ActionBarSherlock của ?attr/actionBarSize) cho chiều cao trong XML hoặc getResources().getDimensionPixelSize(R.attr.actionBarSize) trong mã là đủ.

chỉnh sửa:

Er, trong lần đọc thứ hai của câu hỏi của bạn, dường như tập trung hơn vào việc xác định xem thanh tác vụ chia tách có tồn tại hay không.

Bạn có thể muốn đọc những câu trả lời và các ý kiến ​​theo dõi bởi Adam Powell, hành động thanh guru:

+0

Có, tôi cũng cần biết liệu nó có tồn tại hay không. Dù sao, tôi đã nói (bởi Roman tôi nghĩ) trên Android Office Hours rằng điều này chỉ đơn giản là không thể. Ít nhất không phải là một cách dễ dàng và thẳng về phía trước. Do đó, chúng tôi hiện đang thử nghiệm với một thanh tác vụ hàng đầu và bắt chước thanh tác vụ dưới cùng với chế độ xem thông thường thay thế. Điều này giải quyết không chỉ vấn đề này mà còn là vấn đề khác mà chúng tôi muốn "ép buộc" một số hành động vào thanh tác vụ hàng đầu. – pakerfeldt

3

Tôi chạy vào cùng một vấn đề. Trên các thiết bị điện thoại ở chế độ dọc, thanh tác vụ được chia nhỏ. Vì vậy, các mục menu nằm trong thanh hành động trên cùng và các tab trong thanh hành động thứ hai (thanh tab) bên dưới. Tôi chỉ không tìm thấy bất kỳ cách nào có thể để xác định chiều cao của thanh hành động: để xem không gian còn lại trên màn hình trước khi tạo màn hình của tôi.

Vì vậy, tôi đã làm một giả định:

  • trên các thiết bị screensize nhỏ và bình thường actionbar được chia ở chế độ dọc
  • trên các thiết bị screensize lớn (như Nexus 7) actionbar cũng được chia ở chế độ dọc
  • trên các thiết bị screensize xlarge (tablet) các actionbar không chia ở chế độ dọc

Vì vậy, tôi phân biệt screensizes khác nhau và tạo ra một nguồn lực bool

<!-- res/values/booleans.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_split_actionbar">false</bool> 
</resources> 

<!-- res/values-small-port/booleans.xml 
    res/values-normal-port/booleans.xml 
    res/values-large-port/booleans.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_split_actionbar">true</bool> 
</resources> 

Trong đoạn code tôi truy cập giá trị như thế này:

Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar); 

Để có được chiều cao actionbar trong onCreateView() phương pháp:

TypedValue typedVal = new TypedValue(); 
getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS 
int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId); 

Và đôi chiều cao nếu actionbar được chia tách:

if(isSplit) 
    actionBarHeight = actionBarHeight * 2; 

Nó không phải là một giải pháp lý tưởng, nhưng đối với tôi công trình này.

+0

Câu trả lời gần nhất cho giải pháp. –

+2

Dường như với tôi giả định này dựa trên giả thuyết: thanh tác vụ của tôi chia tách trên Nexus 4, nhưng không có trên Nexus 7. –

+0

Nó cũng không được phân chia trên trình giả lập Android Studio 7 của Nexus 7. – isabsent

5

Nếu bạn đang sử dụng ActionBarSherlock bạn có thể tìm kiếm các giá trị boolean abs__split_action_bar_is_narrow

Chỉ cần tạo một số phương pháp tĩnh, nơi bạn có thể làm

return ResourcesCompat.getResources_getBoolean(context, 
          R.bool.abs__split_action_bar_is_narrow); 

bạn cần phải sử dụng ResourcesCompat (từ ActionBarSherlock) lớp vì trước 3.2 không thể đọc các thư mục có số liệu (như các giá trị-sw480)

+0

Điều này vẫn hoạt động trong API 3.1 +? tức là nếu ActionBarSherlock thực sự đang sử dụng thanh tác vụ gốc? –

+0

@CarlosP Vâng, nó hoạt động trên Galaxy Nexus 4.2.2 –

+0

Cảm ơn bạn đã báo cáo lại, đánh giá cao - hy vọng sẽ giúp người dùng khác. –

Các vấn đề liên quan