web-gelistirme-sc.com

Android: Parçanın Arka Plan Rengini Değiştirme

Bir parçanın arka plan rengini değiştirmeyi denedim, ancak küçük bir sorun oluştu.

public class MainActivity extends FragmentActivity {

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

Yani, gösterilen yukarıdaki ana sınıfım için, parçanın XML dosyasını çağıran kod.

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal" >

    <fragment
        Android:id="@+id/fragment1"
        Android:name="com.northreal.practice.FirstFragment"
        Android:layout_width="0dip"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:background="#CBA" />

</LinearLayout>

Yukarıdaki ana sınıf (MainActivity) tarafından çağrılan main.xml mizanpajıdır.

public class FirstFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.main, parent, false);
    }
}

Yukarıdaki Parçalı XML dosyası bu sınıfı çağırır.

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal"
     >

    <TextView
        Android:id="@+id/tv"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="BLAHHHH"
        Android:layout_gravity="center_vertical" />

</LinearLayout>

Bu düzen yukarıdaki FirstFragment sınıfı tarafından şişirilir

Öyleyse, bu neden benim parçamın arka planının rengini değiştirmiyor?

21
Brandon Ling

Parçalar, Görünüm'den devralmaz ve bu nedenle, ayarlanmış bir arka plan yöntemine sahip değildir.

Herhangi bir kolay düzeltme, parçanın yalnızca kök görünümünü kapma bölümünü ayarlamak ve arka planını ayarlamaktır

fragment.getView().setBackgroundColor(Color.WHITE);
35
Adam

Bunun işe yaramamasının nedeni, fragmanın bir aktiviteye benzer şekilde işlem görmesidir. Ana faaliyetin çocuğu olan ve diğer eşyaları görüntülemek için kullanılan bir kaptır.

Android'i yerleştirmeniz gerekir: background = "# CBA", TextView ve NOT parçasını tutan asıl düzende ..

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#CBA"
    Android:orientation="horizontal" >

    <TextView
        Android:id="@+id/tv"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_vertical"
        Android:text="BLAHHHH" />
</LinearLayout>
7
Brandon Ling

Fragment nesnesini aşağıdaki gibi alın:

Fragment fragment = (Fragment) getFragmentManager().findFragmentById(R.id.fragmentId);

Arka planını şu şekilde değiştir:

fragment.getView().setBackgroundColor(Color.WHITE);
2
eldhoittangeorge

Aynı problemle karşılaştım ancak ihtiyacım parçanın çizilebilir arka plan görüntüsünü ayarlamak ya da değiştirmek oldu. Adam'ın cevapladığı gibi, yaklaşım doğru ve fragmandan faaliyete olan bağlantıyı göstermek istiyorum.

En iyi uygulama 'Bağlayıcı' adında bir arayüz kullanmaktır (veya herhangi bir ad).

Connector connector = (Connector) getActivity();
connector.setIt(this);

Daha sonra aktivitenizde 'Connector' arayüzünü uygulayacak ve bu metoda sahip olacaksınız.

@Override
public void setIt(Fragment fragment){
    FirstFragment firstFrag = (FirstFragment) getSupportFragmentManager().findFragmentByTag("first");
    firstFrag.getView().setBackgroundDrawable(getResources().getDrawable(R.drawable.app_background));
    //or for color set
    firstFrag.getView().setBackgroundColor(Color.WHITE);
}
0
Asad