Как изменить цвет переднего плана treenode в xamarin android - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь разработать TreeView на xamarin android. Я следовал по этой ссылке , чтобы разработать приведенный ниже пример.

Я не знаю, как изменить цвет переднего плана TreeNode, т.е. parent и child1, которые являются частью Linear Layout.

Я могу изменить цвет TreeItems, потому что я отображаю TreeItems в TextView.

Любая помощь высоко ценится.

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>

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Делайте то, что вы сделали на 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;
}
}
0 голосов
/ 10 мая 2018

Создайте новый класс для представления TreeNode, как у TreeItem. Создайте новый держатель, как у вас для TreeItem (MyHolder.cs). Создайте новый макет, как у вас для TreeItem (itemview.axml)

MyNodeHolder.cs

public class MyNodeHolder : TreeNode.BaseNodeViewHolder
{

    private Context mcontext;

    public MyNodeHolder(Context context) : base(context)
    {
        mcontext = context;
    }

    public override View CreateNodeView(TreeNode p0, Java.Lang.Object p1)
    {
        var inflater = LayoutInflater.FromContext(mcontext);
        var view = inflater.Inflate(Resource.Layout.nodeview, null, false);
        TextView tv = view.FindViewById<TextView>(Resource.Id.nodetv);
        var item = p1 as TreeNodeItem;

        tv.Text = item.text;
        return view;
    }
}

nodeview.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:background="@android:color/darker_gray">
<TextView
    android:id="@+id/nodetv"
    android:layout_height="wrap_content"
    android:layout_width="match_parent" />
</LinearLayout>

Создайте свой узел в упражнении:

 streetNode.AddChild(streetNumberNode.SetViewHolder(new MyNodeHolder(this)));

Надеюсь, это поможет.

...