1
프로그래밍 방식으로 Navigation Drawer
을 구현했습니다. 왼쪽 상단의 아이콘을 클릭하면 다른 모든 것들이 작동하지만 화면은 어두워집니다 (서랍이 실제로 들어가는 애니메이션). 그러나 서랍이 전혀 움직이지 않습니다.탐색 서랍이 움직이지 않습니다
여기 내 코드입니다.
public class MainActivity extends Activity {
private static final String TAG = "MAIN_ACTIVITY";
private DrawerLayout mDrawerLayout;
public static ArrayList<String> mOptions=new ArrayList<String>();
// ListView represents Navigation Drawer
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mTitle;
private MainActivityLayout mainActivityLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivityLayout=new MainActivityLayout(this,null);
setContentView(mainActivityLayout);//changed this
mOptions.add("Search");
mOptions.add("Inbox");
mOptions.add("Shout-A-Loud");
mOptions.add("Saved Profiles");
mOptions.add("Profile viewers");// premium feature. Will display profile views but not viewers.
mOptions.add("Settings");
mOptions.add("App Info");
mDrawerLayout=(DrawerLayout) mainActivityLayout;//this changed
mDrawerList=(ListView) new ListViewCustom(this,null);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(),
R.layout.drawer_list_item, mOptions);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
mTitle="Social Geek";
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
public void onDrawerOpened(View view) {
super.onDrawerOpened(view);
mTitle="Select";
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
if (savedInstanceState == null) {
selectItem(0);
}
}
두 번째 클래스
public class MainActivityLayout extends DrawerLayout{
static Context context;
static DrawerLayout DrawerLayoutCustom;
static ListViewCustom ListViewCustom;
public MainActivityLayout(Context context,AttributeSet attr) {
super(context,attr);
MainActivityLayout.context=context;
ListViewCustom=new ListViewCustom(context,null);
LayoutParams layoutParams=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
setLayoutParams(layoutParams);
addView(ListViewCustom);
initializeEverything(context, null);
}
3 등은
public class ListViewCustom extends ListView{
static final int LISTVIEW_CUSTOM=0;
public ListViewCustom(Context context,AttributeSet attrs) {
super(context,attrs);
DrawerLayout.LayoutParams layoutParams=
new DrawerLayout.LayoutParams(240,LayoutParams.MATCH_PARENT);
layoutParams.gravity=Gravity.START;
setBackgroundColor(111);
setDivider(getResources().getDrawable(android.R.color.transparent));
setChoiceMode(CHOICE_MODE_SINGLE);
setLayoutParams(layoutParams);
}
}
것입니다. 내 MainActivity의 레이아웃을 프로그래밍 방식으로 XML로 작성하고 싶습니다. 그러나 클래스의 중첩은 나를 혼란스럽게합니다. 그래서 'DrawerLayout을 확장 한 다음'각 클래스에 'addView()'클래스를 생성해야합니까? –
당신은 DrawerLayout을 확장 할 필요조차 없습니다. 코드에서 DrawerLayout을 만든 다음 FrameLayout (내용 프레임)과 ListView를 추가하기 만하면됩니다. –
Philipp 감사합니다. 이 마지막 조언을 따라 나는 그것을 일하게 만들었다! 내가 한 일은 mainActivityLayout = new MainActivityLayout (this, null); mDrawerList = 새 ListViewCustom (this, null); mDrawerLayout = 새로운 DrawerLayout (this); mDrawerLayout.addView (mainActivityLayout); mDrawerLayout.addView (mDrawerList); setContentView (mDrawerLayout) 여전히 사소한 문제가 있지만 걱정하지 않으셔서 다시 한 번 감사드립니다. –