2011-01-25 3 views
1

현재 만들고있는 프로그램의 버튼 배경으로 다음 xml 코드를 사용하고 있습니다. 그러나 동적으로 내 코드 내에서 그라디언트를 변경하고 싶습니다. 처음에는 xml에 정의 된 모양의 속성을 동적으로 변경 하시겠습니까?

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buttonshape" 
android:shape="rectangle"> 
<gradient android:startColor="#F0F0F0" android:endColor="#A0A0A0" 
    android:angle="270" android:id="@+id/buttonGradient"/> 
<corners android:topLeftRadius="7dp" 
    android:topRightRadius="7dp" /> 
</shape> 

, 나는 XML을 가야했다, 난 그냥이 처리하는 내 자신의 클래스를 만들 것이다. 그러나, 나는 연장 할 좋은 수업이 없다는 것을 깨달았다. GradientDrawable에는 모서리를 돌리는 명백한 메서드가 없습니다. RoundRectShape에는 나에게 그라디언트를 줄 수있는 방법이 없습니다. 그러나, 나는 또한 shaprawable 내의 그라디언트/모서리에 대한 접근자를 모른다. 내 생각에이 모양이 어떻게 정의되고 있는지 정확히 이해할 수 없다는 사실입니다 (필자는 다른 곳에서 사용 된 예제를 사용하지 않았습니다). 내가 정의한 모든 xml 뷰는 < /> 태그 내에 포함 된 모든 속성을가집니다. 이것은 다릅니다. < 그래디언트> 및 <> 코너는 무엇입니까? 나는 API/개발자 도구 어디서나 그들을 찾을 수 없습니다. 그리고 어떻게 코드에서 동적으로 변경할 수 있습니까?

답변

2

세스, 당신은 GradientDrawable의 오버로드 된 생성자를 사용하여 시도 할 수 있습니다.

public void setCornerRadius (float radius) 

당신이 GradientDrawable에 수행 할 수 있습니다 둥근 모서리를 설정하는 방법이있다. 나는 아직 아마도 당신은 더 나은 행운을해야 자신을 :(일을 못 했어하지만

나는이 대답을 제공

0

는 다음과 같은 방법으로 조금 Xpath ..

은 "동적"나는 어떤 플랫폼이 아니라 아래 라인이 솔루션에 여러분을 안내 할 수있는 C#으로 모르는 사용할 수 있습니다.

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("path to xml file"); 
XmlNodeList gradientNodeList = xmlDoc.SelectNodes("//gradient"); 
foreach(XmlNode gradient in gradientNodeList){ 
    string startColor = gradient.Attributes["android:startColor"].Value; //GET 
    gradient.Attributes["android:startColor"].Value = "#FFF"; //SET Custom Value 
} 
//OR Simply 
XmlNode xn = xmlDoc.SelectSingleNode("/shape/gradient"); //and same as above 

또는, 당신은 XSLT에 원하는 형식으로하여 입력 XML을 변환 사용할 수 있습니다. 이 말은 그라데이션의 방향을 설정할 수 있습니다

public GradientDrawable (GradientDrawable.Orientation orientation, int[] colors) 

하고 그라데이션이 공급되는 색상의 배열을 전달 :

+0

이 안드로이드 프로그래밍 (자바) –

+0

@Seth :. 음, 비슷한 확실히 뭔가를 해요 이미 언급 한 바는 이것이 할 수있는 일과 최종 해결책이 아니라는 힌트 일뿐입니다. –

+0

Xpath를 사용할 수 없으며 Android에서 xml 리소스 파일이 바이트 코드로 컴파일되므로 그것들을 수정하면 (비록 xml 파일이 패키지되어 있더라도) 불행하게도 아무런 효과가 없다. – ataulm

관련 문제