7

Tôi đang viết một ứng dụng Android để tận dụng chức năng Ngăn xếp bố cục. Tôi muốn có một khả năng sử dụng Layout Drawer như một công cụ điều hướng có sẵn trong suốt ứng dụng. Để sử dụng Bố cục ngăn kéo, tôi đang sử dụng các tệp sau đây trong bố cục hoạt động của tôi tệp xml:Làm thế nào để bọc DrawerLayout xung quanh PreferenceActivity trong một ứng dụng Android?

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- The main content view --> 
    <LinearLayout 
     android:id="@+id/main_content_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- The navigation drawer --> 
    <ListView android:id="@+id/navigational_drawer" 
     android:layout_width="220dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#FFFFFF"/> 
</android.support.v4.widget.DrawerLayout> 

Tuy nhiên, tôi đang gặp nhiều khó khăn khi bao gói DrawerLayout xung quanh PreferenceActivity. PreferenceActivity là một loại hoạt động đặc biệt mà tôi muốn giữ lại vì nó giúp tôi duy trì giao diện của các tùy chọn Android trong ứng dụng của mình; được nói, nó sử dụng hàm addPreferencesFromResource() để nạp các tùy chọn và không sử dụng các cuộc gọi addContentView() để tải các tệp tin XML; tài nguyên tùy chọn thường chứa các thẻ PreferenceScreen không thích được bao bọc trong DrawerLayouts.

Bất kỳ ai phải giải quyết vấn đề đó và bạn đã giải quyết vấn đề đó như thế nào? Nếu bạn có PreferenceActivity trong ứng dụng Android của mình và bạn có DrawerLayout có sẵn trên cùng một hoạt động, vui lòng chia sẻ cách bạn làm điều đó. Bất kì sự trợ giúp nào đều được đánh giá cao.

EDITED: Nếu tôi thay đổi

<!-- The main content view --> 
<LinearLayout 
    android:id="@+id/main_content_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

để

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

sau đó ứng dụng không sụp đổ khi PreferenceActivity được nạp (vì id "danh sách" phù hợp với những gì các Hoạt động Preference được hy vọng tìm thấy); tuy nhiên, ngăn kéo không hiển thị. Nó gần như là nếu mọi thứ bên dưới ListView "list" bị bỏ qua.

+0

Tôi cũng muốn giữ lại các hoạt động hiện tại của mình và thêm động tác ngăn. Không phải vì PreferenceActivity, nhưng bởi vì có gần 100 hoạt động và thay đổi tất cả thành các mảnh sẽ mất một thời gian. Tôi đã có thể làm điều này với HorizontalScrollView, nhưng tôi cảm thấy DrawerLayout sẽ sạch hơn nhiều. –

Trả lời

2

Điều này đã cho tôi một thời gian, nhưng tôi đã có thể thực hiện công việc này cho ứng dụng của mình. Tôi không biết nếu nó làm cho một sự khác biệt, nhưng tôi đang sử dụng HoloEverywhere, vì vậy tôi chỉ giả định này sẽ làm việc trên các tiêu chuẩn PreferenceActivity là tốt.

Trong tôi PreferenceActivity khi tôi gạt tất cả các phiên bản của setContentView() để tải tùy chỉnh của tôi DrawerLayout đó là như của bạn và có một ListView với id android tiêu chuẩn của list. Trong phương pháp cuối cùng tôi đã đảm bảo để gọi onContentChanged() sau khi tôi gọi super.setContentView():

@Override 
public void setContentView(int layoutResID) 
    { 
    setContentView(getLayoutInflater().inflate(layoutResID)); 
    } 

@Override 
public void setContentView(View view) 
    { 
    setContentView(view, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    } 

@Override 
public void setContentView(View view, LayoutParams params) 
    { 

    // inflate the drawer layout 

    super.setContentView(R.layout.navigation_drawer_base_layout); 

    DrawerLayout dl = findViewById(R.id.drawer_layout); 

    // do stuff here initialize the DrawerLayout like add a DrawerToggle, etc 

    ...STUFF 

    // Call onContentsChanged() to let the Activity know it needs to refresh itself. 

    onContentChanged(); 

    } 

trong onBuildHeaders() tôi vẫn gọi loadHeadersFromResource() để tạo ra tất cả các Header s cho khác nhau của tôi PreferenceScreen s.

+0

Cảm ơn bạn Jon. Từ lâu tôi đã chuyển sang và thực hiện Hoạt động của riêng mình để bắt chước giao diện PreferenceActivity. Tôi sẽ đánh dấu câu trả lời của bạn là "đã trả lời". – CocoaAficionado

+0

@jon tôi thực hiện cùng một mã như u viết ở đây, nhưng nó không hoạt động, bạn có thể giúp tôi plz, đây là câu hỏi của tôi: http://stackoverflow.com/questions/37629855/how-to-set-navigation-drawer -in-thíchenceactivity –

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