Search code examples
xamarin.androidtreeviewtreenode

How to change the foreground color of treenode in xamarin android


I am trying to develop a TreeView in xamarin android.I followed this Link to develop the below sample.

I do not know how to change the foreground color of TreeNode i.e parent and child1 which are part of Linear Layout.

I am able to change the color of TreeItems cause I am displaying the TreeItems in TextView.

Any help is highly appreciated.

My MainActivity.cs:

namespace XamarinTreeView
{
[Activity(Label = "XamarinTreeView", MainLauncher = true)]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);
        //create root
        TreeNode root = TreeNode.InvokeRoot();
        TreeNode parent = new TreeNode("parent2");

        ///Parent2 root children
        TreeNode child1 = new TreeNode("Child1");
        TreeItem item = new TreeItem() { text = " Level1" };

        TreeNode child10 = new TreeNode(item).SetViewHolder(new MyHolder(this));
        child1.AddChild(child10);
        TreeItem item1 = new TreeItem() { text = " Level2" };
        TreeNode child11 = new TreeNode(item1).SetViewHolder(new MyHolder(this));
        child10.AddChild(child11);
        TreeItem item2 = new TreeItem() { text = " Level2-1" };
        TreeNode child111_1 = new TreeNode(item2).SetViewHolder(new MyHolder(this));
        child11.AddChild(child111_1);
        TreeItem item3 = new TreeItem() { text = " Level2-2" };
        TreeNode child111_2 = new TreeNode(item3).SetViewHolder(new MyHolder(this));
        child11.AddChild(child111_2);
        ///

        parent.AddChildren(child1);          
        root.AddChild(parent);


        AndroidTreeView atv = new AndroidTreeView(this, root);
        LinearLayout rootlayout = FindViewById<LinearLayout>(Resource.Id.rootlayout);
        rootlayout.AddView(atv.View);
        rootlayout.Invalidate();          
    }
}

public class TreeItem : Java.Lang.Object
{
    public string text;
}
}

Main.axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootlayout">
</LinearLayout>

Solution

  • Do what you have done on child10:

    namespace XamarinTreeView
    {
    [Activity(Label = "XamarinTreeView", MainLauncher = true)]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
    
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            //create root
            TreeNode root = TreeNode.InvokeRoot();
    
            TreeItem parent_item = new TreeItem() { text = "parent2" };
            TreeNode parent = new TreeNode(parent_item).SetViewHolder(new MyHolder(this));
    
            ///Parent2 root children
            TreeItem child1_item = new TreeItem() { text = "Child1" };
            TreeNode child1 = new TreeNode(child1_item).SetViewHolder(new MyHolder(this));
    
            TreeItem item = new TreeItem() { text = " Level1" };
            TreeNode child10 = new TreeNode(item).SetViewHolder(new MyHolder(this));
            child1.AddChild(child10);
    
            TreeItem item1 = new TreeItem() { text = " Level2" };
            TreeNode child11 = new TreeNode(item1).SetViewHolder(new MyHolder(this));
            child10.AddChild(child11);
    
            TreeItem item2 = new TreeItem() { text = " Level2-1" };
            TreeNode child111_1 = new TreeNode(item2).SetViewHolder(new MyHolder(this));
            child11.AddChild(child111_1);
    
            TreeItem item3 = new TreeItem() { text = " Level2-2" };
            TreeNode child111_2 = new TreeNode(item3).SetViewHolder(new MyHolder(this));
            child11.AddChild(child111_2);
    
            ///
    
            parent.AddChildren(child1);          
            root.AddChild(parent);
    
    
            AndroidTreeView atv = new AndroidTreeView(this, root);
            LinearLayout rootlayout = FindViewById<LinearLayout>(Resource.Id.rootlayout);
            rootlayout.AddView(atv.View);
            rootlayout.Invalidate();          
        }
    }
    
    public class TreeItem : Java.Lang.Object
    {
        public string text;
    }
    }