2017-12-24 1 views
2

내 응용 프로그램의 모든 스피너 글로벌 스타일은 2017안드로이드 : 나는 Visual Studio에서 자 마린 안드로이드를 사용하고

나는 모두가 완벽하게 작동하고있는 XML 레이아웃에서 생성되는 몇 가지 기존 스피너는 정확히 어떻게 스타일 한 I 그들을 보길 원해. 다음의 코드는 일반적으로 : 좋은 작품과 내 작은 배경 이미지가 모두 올바르게 렌더링 즉

 <Spinner 
      android:spinnerMode="dialog" 
      android:id="@+id/SpnProject" 
      android:layout_width="fill_parent" 
      android:layout_height="40dp" 
      android:layout_marginBottom="8dp" 
      android:paddingTop="8dp" 
      android:paddingBottom="8dp" 
      android:paddingStart="8dp" 
      android:paddingEnd="8dp" 
      android:background="@drawable/myspinner" 
      android:prompt="@string/project_prompt" /> 

..

가 지금은 동적으로 코드를 통해 100 % 다른 스피너를 만들려고하고있다 (안 레이아웃 XML). 내 코드로 동적으로 LinearLayout 내부에 넣을 것입니다. 이들 중 하나를 만들려면

이 코드는 일반적으로 :

    Spinner CustomPicker = new Spinner(TheActivity); 
        List<CustomAttributeOption> AttOptions = db.GetCustomAttributeOptions(ThisAtt.AttributeId); 
        ArrayAdapter<CustomAttributeOption> AttOptionsAdapter = new ArrayAdapter<CustomAttributeOption>(Activity, Android.Resource.Layout.SimpleSpinnerDropDownItem, AttOptions); 
        CustomPicker.Adapter = AttOptionsAdapter; 
        customAttributeHolder.AddView(CustomPicker, StackerPosition); 

이 코드는 모든 완전히 작동하고 새로운 동적 스피너 내 양식에 나타납니다. 그러나 기본 스타일링이 있고 다른 스타일의 스피너와 동일한 스타일을 적용하고 싶습니다. 특히이 동적 스피너의 높이를 40dp로 지정하십시오. 어디에서라도 코드를 사용하여 layoutHeight = 40dp를 지정할 수없는 것 같습니다. styles/xml을 사용하여 완료해야합니까?

많은 활동을하면서 테마를 설정하고 내 활동에있는 모든 스피너의 스타일을 지정했지만 앱을 만들거나 실행하지 못했습니다.

이상적으로는 레이아웃 XML에서 layout_height 및 layout_width 값을 제거하고 싶습니다. 내 ENIRE PROJECT 종류의 모든 스핀을위한 글로벌 스타일처럼 어딘가에 한 번 정의했습니다.

개별 위젯에 대해 폭과 높이를 개별적으로 지정할 수 있습니까?

답변

1

정의 할 수있는 스타일을 "자동으로"자동 적용하려면 레이아웃 인플레이터를 사용할 수 있습니다.

당신이 당신의 Spinner에 대해 "글로벌"스타일이 있다고 가정하자 : 당신이 당신의 글로벌 스피너 스타일을 사용하여 만들 동적 회 전자 (들)에 대한

<style name="MySpinnerStyle" parent="android:Widget.Spinner"> 
    <item name="android:spinnerMode">dialog</item> 
    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">40dp</item> 
    <item name="android:layout_marginBottom">8dp</item> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingBottom">8dp</item> 
    <item name="android:paddingStart">8dp</item> 
    <item name="android:paddingEnd">8dp</item> 
    <item name="android:background">@drawable/myspinner</item> 
    <item name="android:prompt">@string/project_prompt</item> 
</style> 

만들기 독립 Layout

<?xml version="1.0" encoding="UTF-8" ?> 
<Spinner xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/masterSpinner" 
     style="@style/MySpinnerStyle" /> 

새로운 Spinner을 인스턴스화하는 대신 레이아웃을 부 풀면 연결된 모든 속성이 할당됩니다.

var spinner = LayoutInflater.Inflate(Resource.Layout.Spinner, rootLayout, false) as Spinner; 
spinner.Adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, new string[] { "Stack", "Over", "Flow" }); 
customAttributeHolder.AddView(spinner, StackerPosition); 
+0

다시 한번 감사드립니다. SushiHangover. 방금 작동했습니다.이 작업은 아름답게 작동하며 아주 좋은 팁입니다. 필자의 경우 코드에 약간의 미묘한 변화를 주어야했다. 이것은 내 마지막 작동 진술입니다 (조각 내에서 호출 할 때). var CustomPicker = MyActivity.LayoutInflater.Inflate (Resource.Layout.dynamicspinner, myLinearLayout, false) Spinner; – Aaron

+0

Hey Sushi, 스태틱 스태커의 마크 업을 최소화 할 수 있는지 알고 계시나요? 그렇다면 동적 스터디 레이아웃과 마찬가지로 masterSpinner 레이아웃 파일에서 레이아웃과 스타일을 가져올 수 있습니까? : 같은 뭔가 <스피너 안드로이드 : ID = "@ + ID/SpnProject" 안드로이드 : 프롬프트 = "@ 문자열/project_prompt" 안드로이드 : 스타일 = "스타일 @/masterSpinner"/> – Aaron

+1

가 도움이 @Aaron 다행, Fragment의 OnCreateView는 또한 당신의 활동에 대한 하드 - 레퍼런스를 유지하고 싶지 않을 경우에 대비해서'LayoutInflater'를 전달합니다. – SushiHangover

관련 문제