0

내 활동에 WebView가 화면 가장자리에 닿을 수 있도록 0 패딩이 있어야하는 WebView 조각이 먼저 표시됩니다. 그런 다음 스크롤 막대가 가장자리에 있지만 내용은 채워 지도록 ScrollView 조각 (액티비티가 아닌) 안에 12dp 패딩이 있어야하는 ScrollView 조각으로 전환됩니다. 그러나 ScrollView Fragment가 2- 창 활동 레이아웃의 일부인 경우 왼쪽 면만 패딩해야합니다.조각 전환시 조각에 조건부로 패딩 적용

답변

0

내가 활동에서 인수로 패딩을 보내 그것을 해결합니다. 존재하는 경우, 인수는 Fragment의 기본 패딩보다 우선합니다.

@Override 
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 
    final View view = inflater.inflate(R.layout.fragment_register, container, false); 
    if (this.getArguments() != null) { 
     view.setPadding(this.getArguments() 
       .getInt(ARG_PADDING_LEFT, view.getPaddingLeft()), view.getPaddingTop(), this.getArguments() 
       .getInt(ARG_PADDING_RIGHT, view.getPaddingRight()), view.getPaddingBottom()); 
    } 

    return view; 
} 
0

당신이 시도 할 수 :

@Override 
public void onStart() { 
    super.onStart(); 

    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     //modify the padding 
    } 

} 

편집 :

의 우리가, 당신은 것이 코드, 세부 사항을 표시하는 항목의 목록을 보여주는 첫번째 조각, 초 단편 있다고 가정 해 봅시다 DetailsFragment 인스턴스가 있으면 재사용 할 수 있습니다.

public boolean multiPane() { 
    return getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if(multiPane()) { 
     DetailsFragment details = (DetailsFragment)getSupportFragmentManager().findFragmentByTag("DETAILS_FRAGMENT"); 
     if (details != null) { 
      getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      getSupportFragmentManager().beginTransaction().remove(details).commit(); 
      getSupportFragmentManager().executePendingTransactions(); 
      getSupportFragmentManager().beginTransaction().replace(R.id.multi_details, details, "DETAILS_FRAGMENT").commit(); 
     } else { 
      //create and show a default details fragment(e.g. the first itme on the list idk) 
     } 
    } else { 
     MyListFragment lf = new MyListFragment(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.list_and_details, lf, "LIST_FRAGMENT").commit(); 
    } 

} 

코드의이 부분은 또 다른 (프리 XML) 한 FrameLayout이 용기 (세로 XML)에서 DetailsFragment를 변경할 때 예외를 피하기 위해 사용된다.

getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
getSupportFragmentManager().beginTransaction().remove(details).commit(); 
getSupportFragmentManager().executePendingTransactions(); 

는 예외입니다 :

...java.lang.IllegalStateException: Can't change container ID of fragment DetailsFragment... 

그것은 매우 기본적인 예를

+0

조각은 컨테이너를 인식 할 수 없습니다. – Monstieur

+0

내 응답을 편집했습니다. – ILovemyPoncho

+0

화면을 회전 할 때 패딩이 어떻게 변경되고 작업 스위치가 2 분할 창 레이아웃으로 바뀝니 까? 동일한 Fragment를 두 번 인스턴스화하지 않겠습니까? – Monstieur

관련 문제